抛出 java.util.ArrayList$Itr.checkForComodification 异常

标签 java exception for-loop

当运行下面的代码时,我得到了上面的异常,但我不知道为什么或如何修复它。 我很确定它来自

    for(int node : adjacent(currentnode))
        {
            //System.out.println(adjacent(currentnode));
            //System.out.println(node);
            if (remainingnodes.contains(getNode(node)))
            {
                adjacent.add(node);
                remainingnodes.remove(getNode(node));
                //System.out.println(remainingnodes);
            }
        }

getNode 只接受一个整数并返回相应的节点。在 remainingnodes.contains 中使用 getNode 之前,我以前没有得到异常,但当时它正在删除组件,所以我不得不更改它,现在我得到了异常。

public int distance(int target, List<Integer> detectives)
{
    List<Integer> adjacent = new ArrayList<>();
    Set<Node<Integer>> remainingnodes = new HashSet<Node<Integer>>();
    List<Integer> currentnodes = new ArrayList<>();

    int distance = 0;
    int i = 0;



    currentnodes.add(target);
    remainingnodes = graph.getNodes();
    remainingnodes.remove(getNode(target));

    while (detectives.size() != 0)
    {

        for (int currentnode : currentnodes)
        {

            for(int node : adjacent(currentnode))
            {
                //System.out.println(adjacent(currentnode));
                //System.out.println(node);
                if (remainingnodes.contains(getNode(node)))
                {
                    adjacent.add(node);
                    remainingnodes.remove(getNode(node));
                    //System.out.println(remainingnodes);
                }
            }
            for (int detective : detectives)
            {
                if (currentnode == detective)
                {
                    distance = distance + i;
                    detectives.remove(detective);
                }
            }
        }

    currentnodes.clear();
    currentnodes = adjacent;
    i++;
    }

谢谢 亚瑟

最佳答案

您不能为每个循环修改 List。如果您想删除循环中的任何元素,请使用 iterator。您可以使用 iterator.remove(); 删除元素,这会删除 iterator 中的当前元素。

关于抛出 java.util.ArrayList$Itr.checkForComodification 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954427/

相关文章:

Java:具有编码和缓冲区大小的PrintWriter

java - 'for' 循环中的复杂更新规则

java - 如何使用 ThymeLeaf 发送带有内联图像的电子邮件

android - 抛出异常,catch 部分被忽略

ruby - 嵌套异常中的回溯

c# - 使用 netMsmqBinding 与 IIS 托管绑定(bind)时,WCF 服务托管失败

android - 如何在android中给定的两个范围之间生成时间?

Python - itertools.product() 内的 for 循环

java - 如何从java映射: Map<String, ArrayList<String>>获取值?

java - getParcelableArrayList 返回一个 Parcelable,但我需要它来返回我的对象​​。 (java 安卓)