我在我的类中有这段代码,它会在粗体线上抛出java.util.ConcurrentModificationException(用** **表示)
public void solve() {
**puzzleSolve(set.size(), sequence , set);**
}
//private helper method
protected void puzzleSolve(int k, String s, ArrayList<Character> u){
ListIterator<Character> iter = u.listIterator();
while(iter.hasNext())
{
Character c = iter.next();
if(k==1){ //base case
if(isAnswer(s+u.get(0)))
System.out.println(s+u.get(0)+" is the correct sequence."+ '\n');
return;
}
else{
**iter.remove();**
**puzzleSolve(k-1, s+c , u);**
iter.add(c);
removeLastChar(s);
}
}
} //end of puzzleSolve method
答案 0 :(得分:4)
每个递归调用都有自己的iter
。因此,您需要同时通过多个迭代器修改列表,这是不允许的。你必须重新设计......
关于重新设计 - 您可以使用for (int i = 0; i < u.size(); i++)
并在进行递归调用之前从数组中删除i
元素,然后使用add(i,element)将其插回。
我并不是说我的设计很好,但可能有用......