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

Art*_*vez 4 java for-loop exception

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

    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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

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++;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢亚瑟

Dil*_*mar 6

您不能修改List每个循环的输入。如果要删除循环中的任何元素,请使用iterator. 您可以使用iterator.remove();which 删除元素中的当前元素来删除iterator.