据我所知,如果你有一个 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/