아래의 재귀 함수는 '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를 사용하여 모든 자식을 반복하는 대신 for 루프를 사용합니다. ConcurrentModificationException
자바 독에서
노드 클래스 표시 – Venkatesh
n.children은 어떤 유형입니까? stacktrace를 추가 할 수 있습니까? – flob
같은 'ConcurrentModificationException'은 반복하는 동안 목록에 추가 할 때도 발생할 수 있습니다. –