У меня есть код для пиццы, который выполняет итерацию по списку объектов и проверяет, сталкиваются они или нет. Если кто-то сталкивается, он удаляется из ArrayList.Неожиданное поведение с ArrayList.remove()
for (int i = 0; i < arrayList.size(); i++) {
Object c = arrayList.get(i);
if (Rect.intersects(foo.getRect(), c.getRect())) { //Android function, checks if the two rectangles are inside each other.
foo.setPosY(c.getPosY() + 11); // Always works.
foo.setVelY(bird.getVelY() * -1); // Always works.
arrayList.remove(i); // Occasionally fails under special circumcisions.
}
}
При открытии приложения в первый раз это прекрасно работает. Однако, если я выйду с помощью кнопки «Назад», а затем быстро откройте приложение, все будет работать , за исключением, изредка удаляется объект из ArrayList.
Если я закрою приложение и удалю его из списка последних приложений, он будет работать. Если я выйду с домашним ключом или кнопкой «назад», а затем немедленно открою его, иногда это не удастся удалить объект. Я не понимаю, почему это происходит, поскольку все еще работает. Две строки кода перед тем, как он функционирует нормально. Я просто не понимаю.
Как это может код работать? 'c' объявлен как' Object', а 'Object' не имеет' .get *() 'методов ... Или это что-то еще, чем' java.lang.Object'? – fge
Во-первых, вы всегда пропускаете элемент после его удаления. Либо работайте с обратной стороны, либо уменьшайте 'i' после операции' remove', или используйте итератор. –
@fge, Извините. Я имел в виду, чтобы это подразумевало мой собственный класс. Это просто объект foo, который имеет право, которое вы можете получить. – Jimicrackcorn