我不知道我是否做对了,但我有一些类似的东西:
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();
}这可能都是错的。但是你能给我一些建议吗?
发布于 2014-04-04 01:31:08
对于ArrayList,您只需要一个for循环就可以进行迭代。顺便说一句,您没有指定ArrayList包含的类型。应该是新的al = ArrayList ArrayList();
对于迭代尝试:
for(int i = 0; i < al.size(); i++)
{
....
}类型安全很重要!如果你使用类型安全声明,那么你不需要转换返回值。
发布于 2014-04-04 01:33:08
要从迭代器中获取值,您应该使用next()方法。此方法返回迭代器指向的值,并将迭代器移动到容器中的下一个元素。
while(itr.hasNext()) {
Bullet bullet = (Bullet) itr.next();
bullet.move();
}从Java1.5开始,您可以以更优雅的方式遍历集合(这与上面的功能相同,但您不必担心迭代器):
for(Bullet bullet : al) { // Assuming you use generic ArrayList<Bullet>
bullet.move();
}发布于 2014-04-04 14:21:43
基本上,您的第一种方法最适合这种情况,在迭代器上调用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);
}https://stackoverflow.com/questions/22844747
复制相似问题