IndexOutOfBoundException错误

时间:2017-12-29 11:26:10

标签: java arraylist

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

请有人帮助我哪里出错了!提前谢谢。

1 个答案:

答案 0 :(得分:1)

以错误的顺序删除索引

您要使用jk按索引删除项目,但不检查订单。

如果你有:

  • 4项
  • j = 2
  • k = 3

致电时

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) {

旧值

jk可能无法更新,因为firstsecond每次都不会重置。

示例:

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;