Java 为什么hasNext()不会变为false?

Java 为什么hasNext()不会变为false?,java,iterator,infinite-loop,Java,Iterator,Infinite Loop,从我看到的情况来看,如果您有一个iterable,并且使用iterable.hasNext在循环中,它将循环数组中的所有元素,但在这里的代码中,它永远不会终止: //ArrayList<FriendlyBullet> list = . . .; Iterator<FriendlyBullet> fbi = list.iterator(); while (fbi.hasNext()) { // This loops supposedly infini

从我看到的情况来看,如果您有一个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:

//ArrayList<FriendlyBullet> list = . . .;
Iterator<FriendlyBullet> fbi = list.iterator();
while (fbi.hasNext()) { // This loops supposedly infinitely
    fbi.next().draw(g2d);
}
或者如果您使用的是Java8

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

... 因此fbi迭代器永远不会向前推进。这很有意义,因为我已经声明了game.list.iterator,我不需要在循环中再次引用它,我可以使用fbi。另外,感谢您在本文中解释使用:的循环,因为这是我最初想要做的,但我不知道如何做。
list.forEach(fb -> fb.draw(g2d));