使用迭代器的Java fire bullet

使用迭代器的Java fire bullet,java,iterator,Java,Iterator,我不知道我是否做对了,但我有这样的想法: ArrayList al = new ArrayList(); Iterator itr; 如果我按空格键fire则变为true if (fire) { Bullet bullet = new Bullet(ship.getX(), ship.getY(), true); al.add(bullet); itr = al.iterator(); fire = false; } while(itr.hasNext()) { //h

我不知道我是否做对了,但我有这样的想法:

ArrayList al = new ArrayList();
Iterator itr;
如果我按空格键
fire
则变为true

if (fire) {
   Bullet bullet = new Bullet(ship.getX(), ship.getY(), true);
   al.add(bullet);
   itr = al.iterator();
   fire = false;
}
while(itr.hasNext()) {
//here i want my Bullet class funcion move();
// something liek itr.move();

}

可能都错了。但是你能给我一些建议吗?

有了数组列表,迭代只需要一个for循环。顺便说一句,您没有指定ArrayList包含的类型。它应该是ArrayList al=new ArrayList()

对于迭代,请尝试:

for(int i = 0; i < al.size(); i++)
{
  ....
}
for(int i=0;i

类型安全很重要!如果使用类型安全声明,则不需要强制转换返回值。

要从迭代器获取值,应使用
next()
方法。此方法返回迭代器指向的值,并将迭代器移动到容器中的下一个元素

while(itr.hasNext()) {
    Bullet bullet = (Bullet) itr.next();
    bullet.move();
}
由于Java 1.5,您可以以更优雅的方式对集合进行迭代(与上面的方法相同,但您不必担心迭代器):

for(Bullet:al){//假设使用泛型ArrayList
bullet.move();
}

基本上,您的第一种方法最适合这种情况,在迭代器上调用
delete
允许您在移动的同时从集合中删除项目符号


final ArrayList test = new ArrayList(Arrays.asList("test", "Foo", "Bar"));

final Iterator iterator = test.iterator();

while (iterator.hasNext()) {
    final String next = iterator.next();
//Some action on Your bullet
    System.out.println(next);
//check if you want to remove it
    if ("Bar".equals(next)) {
        iterator.remove();
    }
    System.out.println(test);
}

非常感谢。它起作用了。我能摧毁从窗户飞出去的子弹吗?谢谢:)

final ArrayList test = new ArrayList(Arrays.asList("test", "Foo", "Bar"));

final Iterator iterator = test.iterator();

while (iterator.hasNext()) {
    final String next = iterator.next();
//Some action on Your bullet
    System.out.println(next);
//check if you want to remove it
    if ("Bar".equals(next)) {
        iterator.remove();
    }
    System.out.println(test);
}