为什么hasNext()不会变错?

时间:2015-01-12 22:52:03

标签: java iterator infinite-loop

从我所看到的,如果你有一个iterable,你在循环中使用iterable.hasNext,它将循环遍历数组内的所有元素,但在这里的代码中,它永远不会终止:

    //ArrayList<FriendlyBullet> list = . . .;
    Iterator<FriendlyBullet> fbi = list.iterator();
    while (fbi.hasNext()) { // This loops supposedly infinitely
        this.game.list.iterator().next().draw(g2d);
    }

我知道列表中没有无限或大量的项目。 FriendlyBullet只是我正在使用的一个类。如果我的问题中没有包含对我来说必不可少的内容,请告诉我!我不确定这是否是我的语法问题或什么,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:12)

此方法调用

this.game.list.iterator()....

在每次循环迭代中创建一个新的迭代器。 <{1}}永远不会被调用。

您应该重复使用fbi.next(),如下所示:

fbi

请注意,这恰好等同于

//ArrayList<FriendlyBullet> list = . . .;
Iterator<FriendlyBullet> fbi = list.iterator();
while (fbi.hasNext()) { // This loops supposedly infinitely
    fbi.next().draw(g2d);
}

或(如果您使用的是Java 8)

for (FriendlyBullet fb : list)
    fb.draw(g2d);