java - 订购 10 个数字的列表

标签 java arrays max min atomicinteger

我有一个大小为 10 的原子整数数组。我正在使用这个数组来组织线程发送的数字 1-10。这个 1-10 最终将能够变为大于 10 的数字范围,并且该列表将包含该范围内的 10 个最大数字。我可以看到进入循环的数字,并认识到它们大于当前存在的数字。但是,打印出来时数组中的数字永远不会超过 2 个。我试图在 Debug模式下跟踪我的代码,但是,它看起来就像我预期的那样工作。我觉得我的逻辑可能有一个简单的错误?我完全确定所有值都在函数中输入,因为我已经对此进行了三次检查。我从应该包含最高值的数组末尾开始,然后在确定插槽后向下交换。我将不胜感激。这只是我正在做的一个简单实验,目的是在尝试完成家庭作业之前掌握基础知识。

这是我的代码示例:

 public class testing{

            static AtomicIntegerArray maxList = new AtomicIntegerArray(10); 
            final static int n = 10;

    static void setMax(int value)
            {

            for(int i = 9; i >= 0; i--)
            {       
                if(value > maxList.get(i))
                { 
                    int temp = maxList.get(i);

                maxList.set(i,value);

                if(i == 0)
                {
                    maxList.set(i, value);
                }

                else
                {   for(int j = i-1; j > 0; j--)
                    {
                        maxList.set(j, temp);
                        temp = maxList.get(j-1);
                    }
                }
                break;
            }
        }


    public static void main(String[] args)
    {
        for (int i = 0; i < n; i++)
        {
            setMax(i);
        }
    }
}

这是一个如何调用它的例子:

最佳答案

Brooke,你的“j”循环中有一个小错误。您保存了变量 (temp) 的状态,但是 j 循环中的逻辑丢失了状态。这个新逻辑保留了列表中前一个元素的状态。

试试这个:

for (int j = i - 1; j >= 0; j--) {
    int t2 = maxList.get(j);
    maxList.set(j, temp);
    temp = t2;
}

关于java - 订购 10 个数字的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478862/

相关文章:

java - Android Volley 错误 : com. android.volley.ClientError

javascript - ES6 Spread 运算符到 vanilla Javascript

c++ - C++中使用指针的数组中元素的数量

python - 获取 Pandas 中每行 N 个最大/最小值的列名

MySQL 使用 Group By 选择最大出现次数

java - 没有任何形式如何启动露天工作流程?

java - Functor 和 Command 模式有什么区别?

java - 从 iOS 到 Socket 的数据损坏

arrays - JQ - 合并两个数组

sql - 偏移MySQL Max