为什么 hasNext() 不会变为 false?
Why won't hasNext() become false?
据我所知,如果你有一个可迭代对象并在循环中使用 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 只是我正在使用的 class。如果我的问题中没有包含对帮助我至关重要的内容,请告诉我!我不确定这是我的语法问题还是什么,非常感谢任何帮助。
这个方法调用
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));
据我所知,如果你有一个可迭代对象并在循环中使用 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 只是我正在使用的 class。如果我的问题中没有包含对帮助我至关重要的内容,请告诉我!我不确定这是我的语法问题还是什么,非常感谢任何帮助。
这个方法调用
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));