目前,我正在编写一个程序,该程序必须在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循环。

迭代器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解释了如何处理这些问题。

07-27 19:41