目前我正在编写一个必须遍历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();
答案 0 :(得分:3)
您多次进入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解释了如何处理这些问题。