Подскажите пожалуйста, когда я пишу if(list.get(i).contains("л")&& !list.get(i).contains("р")) {list.add(i, list.get(i));i++;} в конце i++ то следующее значение в цикле
for (int i=0;i<list.size();i++){ будет на 1 больше, то есть i = 1, 3 ?? Если так то почему задача успешно компилируется ведь тогда не выполнится условие i<list.size()
public static ArrayList<String> fix(ArrayList<String> list) {
for (int i=0;i<list.size();i++){
if(list.get(i).contains("л")&& !list.get(i).contains("р")) {list.add(i, list.get(i));i++;}
Андрей
29 уровень
Не понимаю как выполняется условие
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр ВладимировичExpert
29 апреля 2018, 19:37
Пользуйтесь отладчиком,очень помогает.
+1
Mariya
25 апреля 2018, 11:37
Пусть у тебя в списке лоза, лира. После первого прохождения список увеличится на один и станет лоза, лоза, лира. Если ты i увеличишь всего лишь на один, то прога начнет работать со вторым словом, которое при новом списке опять лоза и следовательно увеличит его опять и так пока не перегрузит память, как и сказал предыдущий комментатор. Поэтому при увеличение списка и нужно i увеличивать дважды, чтоб цикл перепрыгивал через только что добавленное слово.
0
--------Master
21 апреля 2018, 17:32
Подумай, что происходит со списком, начиная с позиции i, если на эту позицию вставить новый элемент
0
Андрей
21 апреля 2018, 18:43
Ну получается что список увеличивается на 1 элемент, а i то увеличивается на 2 (один раз внутри цикла), потом сам цикл ее еще увеличивает на 1.
0
--------Master
21 апреля 2018, 19:38
Помимо того, что увеличивается список, текущий элемент получает индекс i+1. Если увеличивать i только один раз, то на следующей итерации вновь будет осуществляться проверка того же самого элемента, по результатам проверки он снова будет добавляться список, индексы будут сдвигаться и так бесконечно, пока не вылетит переполнение стека или нехватка памяти.
0