【问题标题】:IndexOutOfBoundsException appears when trying to delete an element from our arraylist尝试从我们的数组列表中删除元素时出现 IndexOutOfBoundsException
【发布时间】:2019-04-02 17:05:35
【问题描述】:

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

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);
        }

      }      
    }
}

【问题讨论】:

标签: java arraylist processing


【解决方案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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多