目前,我正在编写一个程序,该程序必须在for循环中进行遍历和arraylist的访问,如下所示。
List<Integer> currentLevel = new ArrayList<Integer>();
List<Integer> nextLevel = new ArrayList<Integer>();
Iterator<Integer> it = currentLevel.iterator();
currentLevel.add(1);
for(x=0;x<20;x++){
while(it.hasNext()){
int element = it.next();
nextLevel.add(element*2);
if(element%6 == 4){
nextLevel.add((element-1)/3);
}
}
currentLevel.clear();
currentLevel.addAll(nextLevel);
nextLevel.clear();
}
有了这段代码,它似乎只能通过一次while循环。这是因为在第一个循环之后,它仅将一个数字添加到nextLevel数组,而currentLevel数组具有与以前相同的索引量吗?还是我遗漏的东西?如果我尝试在while循环后向nextLevel数组添加其他元素,则会在该行出现错误
int element = it.next();
最佳答案
您将多次进入for
循环,但只能在第一次通过while
循环时进入for
循环。
迭代器it
在for
循环之外定义,并且仅分配一次。
第一次通过for
循环进入while
循环:
while(it.hasNext()){
int element = it.next();
...
}
这完全耗尽了迭代器。以后每次通过
for
循环,it.hasNext()
为false,因此while
循环不执行任何操作。您还尝试重新使用
nextLevel
和currentLevel
,但是这些仅被分配了一次。因此,currentLevel
仅包含添加到nextLevel
的最后一组元素。如果我尝试在while循环后向nextLevel数组添加其他元素,则会在该行出现错误
您可能会遇到并发修改异常。修改列表后,不能将其用于列表。 https://stackoverflow.com/a/1496206/20394解释了如何处理这些问题。