У меня есть следующий снайперский код, где я хочу удалить все '0' из массива p4. Этот массив будет помещен в arraylist amountOfColorPoints. Для цикла Loop должен работать до конца размера списка, но он больше не выполняется после того, как первый «0» был удален, как я могу видеть на консоли. В чем проблема? Может ли кто-нибудь помочь мне?Почему цикл for не продолжается
int[] p4={0,0,4};
ArrayList<Integer> amountOfColorPoints = new ArrayList<>();
. . .
for(int p=0; p<amountOfColorPoints.size(); p++) {
if (amountOfColorPoints.get(p) == 0)
amountOfColorPoints.remove(p);}
Вам нужен «Итератор» –
Подумайте о том, что вы делаете, сначала удалите первый 0, оставляя свою коллекцию как '{0,4}', тогда вы проверяете, является ли второе значение 0, это не так 4, и ваша петля завершается. –
есть несколько проблем, но один из наиболее важных здесь заключается в том, что вы одновременно итерации * и * изменяете список в одно и то же время, и это гарантированная ошибка прямо там. Если вы не бежите через свой список назад, а это не так. В качестве упражнения возьмите ручку и бумагу, а для вашего трехэлементного массива выпишите, что происходит с вашей позицией и вашим массивом, на каждом шаге этого кода. Это займет у вас минутку, но это ценное упражнение. –