Bro*_*oke 3 java arrays max min atomicinteger
我有一个大小为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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何调用它的示例:
布鲁克,你的'j'循环中有一个小错误.您已经保存了变量(temp)的状态,但是j循环中的逻辑丢失了状态.这个新逻辑保留了列表中前一个元素的状态.
试试这个:
for (int j = i - 1; j >= 0; j--) {
int t2 = maxList.get(j);
maxList.set(j, temp);
temp = t2;
}
Run Code Online (Sandbox Code Playgroud)