我的代码中的java.util.ConcurrentModificationException iter.remove()& iter.add()

时间:2014-11-17 21:03:11

标签: java exception concurrentmodification listiterator

我在我的类中有这段代码,它会在粗体线上抛出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 个答案:

答案 0 :(得分:4)

每个递归调用都有自己的iter。因此,您需要同时通过多个迭代器修改列表,这是不允许的。你必须重新设计......

关于重新设计 - 您可以使用for (int i = 0; i < u.size(); i++)并在进行递归调用之前从数组中删除i元素,然后使用add(i,element)将其插回。

我并不是说我的设计很好,但可能有用......