尝试从ArrayList边界检查项目时出错,但不确定替代方案

时间:2015-09-02 02:58:00

标签: java arraylist

我正在为MOOC构建一个小程序,它将组合两个Integer arraylists,但删除任何重复的数字。我相信,我的逻辑是合理的 - 但似乎JAVA并没有像我想象的那样解决问题的功能。这里的逻辑是:首先将所有项目添加到arraylist,然后按升序排序,然后检查每个检查前的项目是否相同,如果是,则删除项目并继续检查。

问题是,我认为,它试图检查arraylist.get(-1)并遇到错误(因为它应该)&& 我无法从第1项开始检查,因为它不允许我将x预先定义为1 。如果前者是这种情况,任何人都可以指出我错在哪里或为我提出替代方案,如果是后者 - 我如何预先定义x为1并仍然使用循环?这是我的代码:

public static void smartCombine(ArrayList<Integer> uno, ArrayList<Integer> due) {
        int index = (uno.size() - 1);
        uno.addAll(index, due);
        Collections.sort(uno);
        for (int x : uno) {
            if (uno.get(x) == uno.get(x - 1)) {
                uno.remove(x - 1);
            }
        }
    }

这是错误:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at SmartCombining.smartCombine(SmartCombining.java:11)
at SmartCombining.main(SmartCombining.java:28)
Java Result: 1

1 个答案:

答案 0 :(得分:2)

for循环迭代,而不是索引

由于您要比较两个值,因此可以使用普通的for循环。在您的情况下,由于您使用x - 1,因此您必须在1开始循环。

for (int x = 1; x < uno.size(); x++) {