java - 为什么 hasNext() 不会变成 false?

标签 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 只是我正在使用的一个类。如果我的问题中没有包含任何对帮助我至关重要的内容,请告诉我!我不确定这是否是我的语法问题或什么问题,非常感谢任何帮助。

最佳答案

该方法调用

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

在每次循环迭代中创建一个新的迭代器。 fbi.next() 永远不会被调用。

您应该按如下方式重用 fbi:

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

请注意,这恰好相当于

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

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

list.forEach(fb -> fb.draw(g2d));

关于java - 为什么 hasNext() 不会变成 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912112/

相关文章:

javascript - 使用 Node Express 从 Apache Ignite 获取数据时出现问题

java - "Accounting"JavaFX 中的样式表单元格

java - 从数据库中删除值-Spring MVC,数据JPA

php - 是否可以实现一个扩展 Traversable 的接口(interface)?

Java - 只执行一次方法

c - 嵌套 switch 导致无限循环

Java map 之间的差异,包括值

c++ - 错误 : request for member ‘end’ in . ... 属于非类类型 ‘double’

python - 从发电机外部控制发电机(networkx simple_cycles)

c++ - for(;;) 和 while(1) 有什么区别?