首页 文章

java.util.ConcurrentModificationException&iteration?

提问于
浏览
0

我是Arraylists和迭代器的新手,这是我第一次遇到这个例外 . 我有一个ArrayList你和我想做以下算法:

for (Character c:u){

    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{
        u.remove(c);
        puzzleSolve(k-1, s+c , u);
        u.add(c);
        removeLastChar(s);
    }

    } //end of for each

当我搜索这个异常时,我发现我无法删除每个arrayl上的iterms weth并且我需要使用迭代器,但是我很困惑我在哪里以及如何确定我必须放入while(iter.hasNext())这段代码就是这样的东西 . 如果你能帮助我,我将不胜感激

PS . s是String(最初为空)&k是int

3 回答

  • 1

    试试这个:

    Iterator<Character> iter = u.iterator();
    while (iter.hasNext())
    {
        Character currentChar = 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+currentChar  , u);
             u.add(currentChar);
             removeLastChar(s);
        }
    

    }

  • 1

    我究竟必须把它放在哪里(iter.hasNext())

    您可以使用 iterator ,如下所示:

    Iterator<Character> iter = u.iterator();
    while(iter.hasNext())
    {
      Character c = iter.next();
      .....
    }
    

    使用泛型初始化列表: List<Character> u = new ArrayList<Character>();

    Hint :在适用的地方使用 iter.remove()iter.add() 而不是 u.remove()u.add() .

    你需要从这里开始:http://www.tutorialspoint.com/java/java_using_iterator.htm

  • 0

    当您使用 foreach 循环时,您正在使用 iterator implicitly .

    ConcurrentModificationException 在集合被"simultaneously"修改时发生,迭代器通过任何方式通过集合,迭代器除外 .

    所以,使用 iterator

    Iterator<Character> iter = u.iterator();
    while (iter.hasNext())
    

    如果你需要在循环中修改集合 .

相关问题