我对Arraylists& amp;迭代器和这是我第一次遇到这个例外。 我有一个ArrayList u&我想做以下算法:
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
当我搜索这个例外时,我发现我无法删除每个arraylist上的iterms weth&我需要使用迭代器 但是,我很困惑,在哪里&我究竟必须把它放在一边(iter.hasNext())&这段代码就是这样的东西。 如果你能帮助我,我将不胜感激。
PS。 s是String(最初为空)& k是int
答案 0 :(得分:1)
我必须把它放在什么时候(iter.hasNext())
您可以使用iterator
,如下所示:
Iterator<Character> iter = u.iterator();
while(iter.hasNext())
{
Character c = iter.next();
.....
}
使用泛型初始化您的列表:List<Character> u = new ArrayList<Character>();
提示:在适用的地方使用iter.remove()
,iter.add()
,而不是u.remove()
和u.add()
。
您需要从这里开始:http://www.tutorialspoint.com/java/java_using_iterator.htm
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
当您使用 foreach 循环时,您正在隐式使用迭代器。
当&#34;同时&#34;修改集合时,会发生ConcurrentModificationException 。通过迭代器以任何方式通过集合,迭代器除外。
所以,使用迭代器
Iterator<Character> iter = u.iterator();
while (iter.hasNext())
如果您需要在循环中修改集合。