while(list.size() != 0 )
{
for(int i=0 ;i<list.size();i++)
{
//if current element is smaller than firat update first & second
if(list.get(i) < first)
{
second = first;
first = list.get(i);
j = i;
}
else if(list.get(i)<second && list.get(i) != first)
{
second= list.get(i);
k = i;
}
}
list.remove(j);
list.remove(k);
list.add(first+second);
for(int inte :sortedArray)
{
sortedArray.add(first+second);
}
}
Collections.sort(sortedArray);
这里的代码我得到一个错误!!!
线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:2,Size:2
请有人帮助我哪里出错了!提前谢谢。
答案 0 :(得分:1)
您要使用j
和k
按索引删除项目,但不检查订单。
如果你有:
致电时
list.remove(j); //list.length() == 3
list.remove(k); //Exception
当您致电remove(k)
时,列表会缩短,因此您不在列表中。只需先删除较大的索引。
list.remove(Math.max(j,k));
list.remove(Math.min(j,k));
您正在进行检查,直到列表为空,如果您只有一个项目,则无法删除两个项目,只需将条件更新为仅有1个项目时停止。
while (list.size() > 1) {
j
或k
可能无法更新,因为first
和second
每次都不会重置。
示例:
List<Integer> list = new ArrayList<>();
list.add(4);
list.add(3);
list.add(2);
list.add(1);
第二个循环将失败,因为j = 3
`Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3`
重置每次迭代的值:
while (list.size() > 1) {
int first = Integer.MAX_VALUE, second = Integer.MAX_VALUE;