在循环上方从ArrayList中删除元素

时间:2014-04-13 16:17:42

标签: java for-loop arraylist

我试图遍历一堆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);
        }

    }

1 个答案:

答案 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()一次。如果是,则未指定迭代器的行为   在迭代进入时修改底层集合   除了通过调用此方法之外的任何其他方式的进展。