有些东西从我的ArrayList中删除了3个元素

时间:2016-04-23 02:07:38

标签: java arraylist

作为家庭作业的一部分,我们必须实施合并排序。没什么大不了的,我以前做过。这一次,虽然我得到IndexOutOfBoundsException。仍然没什么大不了的,不难解决。

但是我做了一点挖掘,最后在我的merge方法的while循环中得到了以下代码:

private static void merge(ArrayList<T> data, int first, int mid, int last) {
    ArrayList<T> temp = new ArrayList<T>();
    int first1 = first, last1 = mid;
    int first2 = mid+1, last2 = last;
    int index = first1;

    while (first1 <= last1 && first2 <= last2) {
       System.out.println("still in while loop");
       System.out.println(data);

        if (data.get(first1).compareTo(data.get(first2)) < 0) {
            temp.add(index, data.get(first1));
            first1++;
        } else {
           temp.add(index, data.get(first2));
           first2++;
        }
           index++;
           System.out.println(data);
    }


    while (first1 <= last1) {
        temp.set(index, data.get(first1));
        first1++;
        index++;
    }

    while (first2 <= last2) {
        temp.set(index, data.get(first2));
        first2++;
        index++;
    }

    data.clear();
    for (index=first; index <= last; index++)
        data.add(index, temp.get(index));
}

输出最终结果如下:

  

仍在循环中

     

[8800,2596,7518,9900,7164]

     

[8800,2596,7518,9900,7164]

     

仍在循环中

     

[2596,8800]

     

线程中的异常&#34; main&#34; java.lang.IndexOutOfBoundsException:Index:2,Size:2

因此,在循环之前的最后一行和while循环中的前两行之间发生了一些事情,它从我的ArrayList中删除了3个数字。问题是:我无法想象。我根本没有删除while循环中的任何数据;我只是将数据添加到不同的ArrayList。 while条件与ArrayList无关。简而言之,我迷失了。

显然,错误出现在方法的后半部分。我仍然不知道该怎么做,IndexOutOfBoundsException的堆栈跟踪仍然指向while循环中的一行(特别是if (data.get(first1).compareTo(data.get(first2)) < 0) {),但它是如果该代码存在,则只能重现。所以我还是输了。

这里有什么?我该如何解决?

1 个答案:

答案 0 :(得分:0)

为了将来参考,我的问题是我没有正确追踪控制流程。我以为我会在while循环中停留,但实际上,我正在爆发,而data.clear()令人惊讶的是,清除了ArrayList。 我的解决方案是用以下方法替换方法中的最后两行:

for (index=first; index <= last; index++)
        data.set(index, temp.get(index));

现在有效。