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++) и удалите ith-й элемент из массива перед выполнением рекурсивного вызова, затем вставьте его обратно с помощью add (i, element).

Я не говорю, что мой дизайн хороший, но он может сработать...

Другие вопросы по тегам