【问题标题】:Ordering a list of 10 numbers订购 10 个号码的列表
【发布时间】:2018-07-06 19:50:04
【问题描述】:

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

这是我的代码示例:

 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);
        }
    }
}

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

【问题讨论】:

  • 为什么不使用SortedList&lt;Integer&gt;?另请考虑创建和发布有效的minimal reproducible exampleSSCCE。详情请阅读链接。
  • @HovercraftFullOfEels 我需要防止多个线程同时更改它。当范围大于 10 时,无法知道您尝试添加的值是否应该在该排序列表中。它可能少于所有元素。我以为我提供了这种类型的例子。我再看一遍。
  • 不,您的代码不是minimal reproducible exampleSSCCE。真正的例子是小而完整的程序,包含导入和主要方法。无法按原样运行当前代码。
  • 谢谢。顺便说一句,这不是我的反对意见,但你确实想让你的问题对有类似问题的其他人尽可能有帮助。
  • @Brooke,是的。好多了。

标签: java arrays max min atomicinteger


【解决方案1】:

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

试试这个:

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

【讨论】:

  • 将额外的变量添加到混合中效果很好。谢谢你抓住那个。我认为这是一件小事,但我很长时间都想不通。我可以看到为什么它之前不能正常工作,因为我的变量的定位方式和它正在抓取的索引。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
相关资源
最近更新 更多