java - 在使用它迭代java时从arraylist中删除项目

标签 java android arraylist

<分区>

当我尝试从 arraylist 中删除一个 int 时,我遇到了大约 20 个错误。这是一个强力球游戏,我试图删除匹配的球以避免重复的球

for (Integer ballNumber : balls) {
   for (Integer yballNumber : yballs) {
         if (ballNumber == yballNumber) {
                match++;
                balls.remove(ballNumber);
                yballs.remove(yballNumber);
         }
    }
}



Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at PowerBall_Simulator.main(PowerBall_Simulator.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

最佳答案

您不能在使用增强的 for 循环迭代时删除元素。您可以通过显式迭代器删除。

    Iterator<Integer> ballsIt = balls.iterator();
    while (ballsIt.hasNext()) {
        Integer ballNumber = ballsIt.next();
        Iterator<Integer> yballsIt = yballs.iterator();
        boolean remove = false;
        while (yballsIt.hasNext()) {
            Integer yballNumber = yballsIt.next();
            if (ballNumber == yballNumber) {
                match++;
                remove = true;
                yballsIt.remove();
            }
        }
        if (remove)
            ballsIt.remove();
    }

请注意,您不应在内部循环中删除两个球,因为这可能会导致多次尝试从 balls 中删除 ballNumber

关于java - 在使用它迭代java时从arraylist中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27952624/

相关文章:

java - 调整窗口大小或使用滚动条后绘画组件消失

java - 可以将其转换为单行流吗?

javascript - DukTape `require()` 抛出 `TypeError: undefined not callable`

java - libGDX 从图像文件夹中创建一个图集

android - 你如何创建一个带有多个后置摄像头的安卓模拟器

java - 无法让 java 流与 arraylist 一起工作

java - 将 ArrayList 转换为数组(有点不同)

java - 如何使用AspectJ(cflow)实现Wormhole模式

java - 编辑 arraylist 中的项目算作修改列表吗?

java - 是否有原始值的对象包装器允许从 lambda 中改变它们?