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)
谢谢亚瑟
您不能修改List每个循环的输入。如果要删除循环中的任何元素,请使用iterator. 您可以使用iterator.remove();which 删除元素中的当前元素来删除iterator.