Выводит просто: "лоза лира". Если "роза" закомментить, код работает нормально, выводит: "лоза лоза лира".
Уже и с верхней границей for поиграл - и strings.size(), который меняется динамически, и k = string.size(), изначальный размер списка, и вручную пробовал цифры ставить.
И i я не увеличиваю при удалении! Строки-то смещаются, мне и надо, чтоб он заново индекс i = 0 смотрел.
* на 34й строке, естессно, комментарий.
package com.javarush.task.task07.task0716;
import java.util.ArrayList;
/*
Р или Л
*/
public class Solution {
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<String>();
strings.add("роза");
strings.add("лоза");
strings.add("лира");
strings = fix(strings);
for (String string : strings) {
System.out.println(string);
}
}
public static ArrayList<String> fix(ArrayList<String> strings) {
//напишите тут ваш код
// int k = strings.size();
for (int i = 0; i < strings.size();) { //i++ ?
char[] str2charArray;
str2charArray = strings.get(i).toCharArray();
for (int j = 0; j < str2charArray.length; j++) {
// удваивать все слова содержащие букву "л"
if ((str2charArray[j] == 'л') && (str2charArray[j] != 'р')) {
//ПОЧЕМУ НЕ РАБОТАЕТ?!
String x = strings.get(i); //берем слово под индексом i
strings.add(i, x); //добавляем его на индекс i
System.out.println("get(i): " + strings.get(i));
// strings.add(i + 1, x);
// System.out.println("get(i+1): " + strings.get(i + 1));
i += 2; //т.к. мы удвоили слово добавляем 2 к индексу, 0 + 2 (0,1) = 2.
}
//удалять из списка строк все слова, содержащие букву "р"
//i не увеличиваем, т.к. список сдвинулся при удалении
else if ((str2charArray[j] == 'р') && (str2charArray[j] != 'л')) strings.remove(i);
//слово содержит и букву "р" и букву "л", то оставить это слово без изменений.
else if ((str2charArray[j] == 'р') && (str2charArray[j] == 'л')) i++;
//другие слова ничего не делаем
else if ((str2charArray[j] != 'р') && (str2charArray[j] != 'л')) i++;
}
}
return strings;
}
}