Я сделал небольшую игру, которая рисует врагов на экране, а враги - из ArrayList. Экран перерисовывается так, что враги также могут двигаться. Я делаю это с помощью этого кода:Удаление материала из ArrayList с помощью итератора при его использовании
for (Meteor m : getMeteorArrayList()) {
if (m.getVisible())
{
canvas.drawBitmap(m.getImg(), m.getX(), m.getY(), p);
}
else
{
Iterator<Meteor> iter = getMeteorArrayList().iterator();
while (iter.hasNext())
{
if (iter.next() == m)
{
iter.remove();
}
}
}
}
Но это создает проблему. Если я убью врага, я хочу, чтобы он был удален из ArrayList. Я знаю, что могу установить его в NULL, но тогда он все еще существует. Для этого я использую Iterator
, как вы можете видеть в коде выше.
Проблема в том, что если экран перерисовывается после я удалил врага сбой приложения с этой ошибкой:
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
Я думаю, это потому, что я вдруг дыру в моей ArrayList на месте где был враг. Как это сделать, чтобы я мог удалить что-то из ArrayList и все равно получить доступ к остальным?
@onepotato Пожалуйста переосмыслений своего отзыв стиля. Принятие редактирования, в котором вам нужно вернуть большую часть редактирования, не подходит. – Tom
Извините, я пропустил суть. Я только улучшил предыдущее редактирование, потому что он по-прежнему содержит неправильную грамматику. – Bnrdo
@onepotato Вы приняли рассмотренное редактирование, и вам нужно было вернуть большую часть редактирования, чтобы исправить его. Вы по-прежнему можете принимать такие изменения, но лучше отказаться от них и редактировать только недостающие части, без необходимости возвращать неправильный материал рассмотренного редактирования. Это то, что я имел в виду. – Tom