使用迭代器的Java fire bullet

时间:2014-04-03 17:23:29

标签: java iterator

我不知道我是否做得对,但我有类似的东西:

ArrayList al = new ArrayList();
Iterator itr;

如果我按空格fire变为真。

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();

}

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

3 个答案:

答案 0 :(得分:0)

使用ArrayList,迭代所需的只是一个for循环。顺便说一句,您没有指定ArrayList包含的类型。它应该是ArrayList< Bullet> al = new ArrayList< Bullet>();

对于迭代尝试:

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

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

答案 1 :(得分:0)

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

while(itr.hasNext()) {
    Bullet bullet = (Bullet) itr.next();
    bullet.move();
}

从Java 1.5开始,您可以以更优雅的方式迭代集合(与上面相同,但您不必担心迭代器):

for(Bullet bullet : al) { // Assuming you use generic ArrayList<Bullet>
    bullet.move();
}

答案 2 :(得分:0)

基本上你的第一种方法最适合这种情况,在迭代器上调用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);
}