迭代的Java问题

时间:2012-02-11 00:03:52

标签: java arraylist iteration

目前我正在编写一个必须遍历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();

1 个答案:

答案 0 :(得分:3)

您多次进入for循环,但只能在第一次通过while循环时进入for循环。

迭代器itfor循环之外定义,只分配一次。

第一次通过for循环输入while循环:

while(it.hasNext()){
    int element = it.next();
    ...
}

完全耗尽了迭代器。通过for循环的每个后续时间,it.hasNext()都为false,因此while循环不执行任何操作。

您还尝试重复使用nextLevelcurrentLevel,但这些只会被分配一次。因此currentLevel只会包含添加到nextLevel的最后一组元素。

  

如果我尝试在while循环之后向nextLevel数组添加其他元素,那么就会在行中出现错误

您可能正在获得并发修改例外。修改后,不能使用迭代器作为列表。 https://stackoverflow.com/a/1496206/20394解释了如何处理这些问题。