java.util.ConcurrentModificationException в моем коде iter.remove() & iter.add()
У меня есть этот кусок кода в моем классе, и он бросает исключение 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
1 ответ
Решение
Каждый из ваших рекурсивных вызовов имеет свой iter
, Таким образом, вы изменяете список через несколько итераторов одновременно, что недопустимо. Вам придется изменить дизайн...
Что касается редизайна - вы можете использовать for (int i = 0; i < u.size(); i++)
и удалите i
th-й элемент из массива перед выполнением рекурсивного вызова, затем вставьте его обратно с помощью add (i, element).
Я не говорю, что мой дизайн хороший, но он может сработать...