我正在为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
答案 0 :(得分:2)
for
循环迭代值,而不是索引。
由于您要比较两个值,因此可以使用普通的for
循环。在您的情况下,由于您使用x - 1
,因此您必须在1
开始循环。
for (int x = 1; x < uno.size(); x++) {