IndexOutOfBoundsException появляется при попытке удалить элемент из нашего массива - PullRequest
0 голосов
/ 02 апреля 2019

В настоящее время мы работаем над игрой в перестрелку. У нас есть классы для пуль и врагов. Мы также создали двух массивов, в которых можно найти эти элементы. Всякий раз, когда пуля попадает в противника, указанный враг должен просто исчезнуть. Вместо этого мы получаем эту ошибку.

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 Ответ

1 голос
/ 03 апреля 2019

Несколько вещей могут пойти не так здесь.Во-первых, ваш цикл for проходит через Bullet ArrayList, однако вы используете этот индекс и для изменения Enemy ArrayList.Так что, если bul.size ()> enm.size () «т.е. массив маркеров больше массива врага», это будет причиной исключения IndexOutOfBoundsException.

Кроме того, если вы пытаетесь проверить наличиепересечение каждой пули с каждым врагом, для которого вы хотите использовать вложенные циклы.В настоящее время вы просто проверяете, пересекаются ли каждая пуля и враг с одним и тем же индексом.

Вы можете решить эту проблему следующим образом:

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