public static void removeBugWithFor(ArrayList<String> list) {
//напишите тут ваш код
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equalsIgnoreCase("bug")) {
list.remove(i);
i--;
}
}
}
Каждый раз при проходе по циклу, в случае удаления элемента ArrayList, мы определяем трушность условия ( i < list.size() ) в строке - for (int i = 0; i < list.size(); i++). Получается, что даже в случае удаления элемента и перестроения/уменьшения внутренней переменной size. мы все-равно заново читаем list.size() и получаем обновленное значение размера ArrayList. Зачем нам дополнительно инкрементировать счетчик цикла. Ведь на каждом проходе мы получаем актуальный размер массива и за границу выйти не должны?Lary
29 уровень
Зачем необходимо инкрементировать размер ArrayList?
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
MichaelKosm
13 февраля 2021, 14:13
При удалении , следующий элемент становится на место удаленного , и получается что позиция не меняется и при итерации - просто пропускается элемент
+2
qpuhuk
13 февраля 2021, 08:14
i-- относится только если сработает if. Иначе говоря,если он сработает данная ячейка удалится и весь массив справа сдвинется на одну ячейку.и при следующем проходе по циклу,если не сделать i--, эта ячейка будет пропущена
+1
Andrew
12 февраля 2021, 11:13
При удалении ячейки листа все остальные ячейки сдвигаются.
К примеру 2 4 6 8 10. Удалили 3 элемент это 6. Теперь третий элемент это 8, но ты в цикле сделаешь i++ и перескочишь эту ячейку. Поэтому при удалении элемента нужно сделать i--.
+1
Lary
13 февраля 2021, 13:15
согласен, я почему-то концетрировался только на значении размера массива size, а еще нужно помнить о сдвижке и перенумерации элементов. спасибо
0
KIRA Разработчик в prosv.ru Expert
12 февраля 2021, 11:12
Так и не понял о чем речь 🤷♂️
Если можете перефразируйте, или выделите часть кода которая не понятна
0