尝试从数组列表中删除元素时出现IndexOutOfBoundsException

时间:2019-04-02 17:05:35

标签: java arraylist processing

当前,我们正在开发射击游戏。我们有子弹和敌人的课程。我们还创建了两个可以在其中找到这些元素的数组列表。每当子弹击中敌人时,该敌人就应该消失。相反,我们收到此错误。

void hit()
{

    for(int i = 0; i < Bullet.size(); i++)
    {
      Bullet bul = (Bullet) Bullet.get(i);
      Enemy enm = (Enemy)enemies.get(i);
      if(bul.x < enm.x + enm.l && bul.x > enm.x - enm.l && enm.y<bul.y)
      {
        enm.health -= 1;
        println("Pew");
        if(enm.health <= 0)
        {
          enm = null;
         enemies.remove(i);
        }

      }      
    }
}

1 个答案:

答案 0 :(得分:1)

这里有些事情可能会出错。首先,for循环通过Bullet ArrayList,但是,您也使用该索引来修改Enemy ArrayList。因此,如果bul.size()> enm.size()“即,子弹数组大于敌人数组”,这就是导致IndexOutOfBoundsException的原因。

此外,如果您要检查每个子弹与每个敌人的交集,则需要嵌套for循环。目前,您只是在检查同一索引处的每个子弹和敌人是否相交。

您可以使用以下方法解决此问题:

for(int i = 0; i < bul.size(); i++){
    for(int j = 0; j < enm.size(); j++){
    //if bullet is intersecting enemy
    //do something
    }
}