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