我下面的递归函数在'continue'语句中抛出一个ConcurrentModificationException异常。我查看了ConcurrentModificationException中的一些帖子,并且所有问题似乎都是从元素中移除一个元素,但是我没有删除我的函数中的任何元素。java.util.ConcurrentModificationException但是我不删除
我的函数如下所示:
public static void getRootedTreeHelper(Node n, boolean[] marked, String spacing){
System.out.println(spacing + "in helper with " + n.getId());
marked[n.getId()] = true;
if(n.children.isEmpty())
return;
else{
for(Node child : n.children){
if(marked[child.getId()])
continue; // ConcurrentModificationException is thrown here.
else{
n.addChild(child);
spacing = spacing + "\t";
getRootedTreeHelper(child, marked, spacing);
}
}
}
}
按照要求:节点类的相关部分显示如下
public class Node {
private int id;
ArrayList<Node> children;
public Node(int id) {
this.id = id;
children = new ArrayList<Node>();
}
/**
* add node n to this node's children
* @param n
*/
public void addChild(Node n) {
children.add(n);
}
// getters and setters()
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
有没有人有什么想法?
编辑解决: 我没有用每个循环遍历所有的孩子,而是使用for循环。
显示您的节点类 – Venkatesh 2014-11-20 21:06:51
n.children是什么类型?你可以添加堆栈跟踪? – flob 2014-11-20 21:08:41
迭代时添加到列表时,也会发生同样的'ConcurrentModificationException'。 – 2014-11-20 21:08:47