使用迭代器的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);
}