java - 尝试检查 ArrayList 范围外的项目时出错,但不确定替代方案

标签 java arraylist

我正在为 MOOC 构建一个小程序,它将组合两个整数数组列表,但删除任何重复的数字。我相信我的逻辑是合理的 - 但似乎 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

最佳答案

for 循环迭代,而不是索引

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

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

关于java - 尝试检查 ArrayList 范围外的项目时出错,但不确定替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343961/

相关文章:

java - 多态性和 Object 类

java - 让 Map 表现得像 ArrayList

c# - 如何从电子邮件地址 ArrayList 中删除重复的域电子邮件地址

java - 以树形 View 的形式过滤 ArrayList 的数据

java - HashTable 中的 ArrayList 是线程安全的

java - Spring TaskExecutor 中的 ActiveMQ 消息组等效项

java - 在 Spring 中自动映射 CrudRepository 与默认的 Rest URI 端点

java - Android searchview 添加行到 ListView

java - 警报对话空对象引用

java - 以两个 ArrayLists 作为参数的方法