我试图遍历一堆brickEnemies并且如果我的条件为真,那么应该从我的阵列中移除砖块。我收到以下错误 IndexOutOfBoundsException 。在删除元素之后,我怎么能让我的for循环保持继续?
int lengthofBrickEnemies = brickEnemies.size();
for (int i = 0; i < lengthofBrickEnemies; i++) {
Brick brick = brickEnemies.get(i);
int newPosition_X = brick.getPositionX() - SPEED;
if (newPosition_X > 0) {
brick.setPositionX(newPosition_X);
} else {
brickEnemies.remove(i);
}
}
答案 0 :(得分:4)
它不是Array
,而是ArrayList
。
要在阅读时从ArrayList
删除某个项目,您应该使用Iterator
然后使用Iterator.remove()
方法。
将是:
Iterator<Brick> it = brickEnemies.iterator();
while (it.hasNext()) {
Brick brick = it.next();
int newPosition_X = brick.getPositionX() - SPEED;
if (newPosition_X > 0) {
brick.setPositionX(newPosition_X);
} else {
it.remove();
}
}
it.remove();
删除.next()
来电返回的商品。
hasNext()
用于确保在ArrayList
中有更多要迭代的项目。
从底层集合中删除返回的最后一个元素 这个迭代器(可选操作)。此方法只能被调用 每次调用next()一次。如果是,则未指定迭代器的行为 在迭代进入时修改底层集合 除了通过调用此方法之外的任何其他方式的进展。