Я реализую логику в пределах for-loop
, которая удалит любые объекты собаки со статусом «ПРИНЯТЫЕ» из объекта питомника.Удаление элементов в arrayList: попытка удалить из индекса, которого нет?
Учтите, что у питомника может быть список много собак.
Loop:
allDogsInKennel = kennel.getDogsList();
for (int i = 0; i < allDogsInKennel.size(); i++) {
//delete any dog object with a status of Accepted
if (allDogsInKennel.get(i).getStatus() == "ACCEPTED") {
kennel.removeDog(allDogsInKennel.get(i));
}
}
метод removeDog
public void removeDog(Dog d) {
this.dogList.remove(d);
}
Проблема у меня есть, например, все 6
собак в списке следует удалить, но в настоящее время удаляются только 3
.
Пример:
original size of list = 6 items
Item removed from index 0 = 5 items
Item removed from index 1 = 4 items
item removed from index 2 = 3 items
Теперь в следующей итерации цикла пытается удалить из index 3
вследствие i++
состояния, но массив будет идти только index 2
как он теперь имеет только 3
пункты в индексах:
0, 1, 2
Как я могу изменить свою логику выше, чтобы гарантировать, что все элементов удалены из массива?
Это похоже на работу, это правильное решение или просто обходной путь? – java123999
Например, если в списке есть 5 объектов, и если вы удаляете 3-й объект. теперь индексы изменяются, а индекс 4-го объекта теперь равен 2 (3-й объект в списке). Поэтому я считаю, что это правильное решение. Для получения дополнительной информации я отредактирую ответ и попытаюсь дать больше примера –
Правильное решение - не использовать ArrayList и петлевую модификацию в первую очередь. В вашем случае вы можете скопировать оставшихся собак в новый список. 'n = ArrayList (dogList.size()); для {(d: dogList), если! d.getStatus(). equals ("ACCEPTED") n.add (d); } dogList = n; '. Это становится чище с потоками. – eckes