【问题标题】:Java problems with iterationJava 迭代问题
【发布时间】:2012-03-03 10:32:47
【问题描述】:

目前我正在编写一个程序,该程序必须在一个看起来像这样的 for 循环中遍历数组列表。

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();

【问题讨论】:

  • 你想让这段代码做什么?不知道您要做什么,就不可能知道代码应该是什么样子。
  • 我正在尝试为数学项目制作反向 Collat​​z 网络,如果您想查看一些代码,请查看此处stackoverflow.com/questions/9186198/…
  • 等等,如果我只是在一个从 for 循环内部调用的不同方法中进行迭代,它会解决我的问题吗?
  • 看起来,创建一个不同的方法来执行迭代并从 for 循环中调用它不会导致错误。

标签: java arraylist iteration


【解决方案1】:

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

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

第一次通过for 循环,您进入while 循环:

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

这完全耗尽了迭代器。以后每次通过for 循环,it.hasNext() 都是假的,所以while 循环什么也不做。

您还尝试重复使用nextLevelcurrentLevel,但它们只分配一次。所以currentLevel 将只包含添加到nextLevel 的最后一组元素。

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

您可能会遇到并发修改异常。修改列表后,您不能将迭代器用于列表。 https://stackoverflow.com/a/1496206/20394 解释了如何处理这些问题。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多