Р или Л

  • 4
  • Недоступна
Друзья секретного центра JavaRush с планеты Ки-Тай столкнулись с одной нестандартной для нас проблемой: они плохо различают буквы «р» и «л». Мы решили им помочь следующей задачей. В созданном списке слов экспериментальный метод fix будет удалять из списка строк все слова, содержащие букву «р», а все слова, содержашие букву «л» — удваивать.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (301)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Andrey Kovynev10 уровень, Новосибирск
четверг, 03:51
Очень интересная задача! Побольше бы таких!!!
GigaMax12 уровень
10 мая, 16:32
Уфф, моя невнимательность мне обошлась в 4 попытки(((
Sherlock04048 уровень, Москва
9 мая, 17:13
Опять 7 попыток из-за невнимательности, но задача реально хорошая. Читайте внимательно Господа) Подсказка: здесь используется list.get(i).contains("р") - для того чтобы узнать содержится ли в слове определенная буква и используйте больше слов для проверки своего кода list.add("роза"); // 0 list.add("мера"); // 1 list.add("лоза"); // 2 list.add("лира"); // 3 list.add("вода"); // 4 list.add("упор"); // 5 и еще, если вы удаляете слово содержащее только Р, то счетчик не должен идти дальше, он должен снова проверять элемент этого же индекса, потому что когда удаляем слово в массиве происходит сдвиг влево.
Valeriy10 уровень
8 мая, 09:38
Так и охота сказать про себя: "Ну, тупой!!!". Решилось методом научного тыка :)
Александр9 уровень, Москва
5 мая, 10:19
Советую такую задачу решить самостоятельно, без каких либо даже малейших подглядываний! Просто шикардос, а не задача! Пожалуй она лучшая из того, что было в этом курсе на данный момент. Знаний для ее решения было дано достаточно, но я решал ее где-то с часок, а все из-за невнимательности. Если разом не удастся решить, то вот вам небольшой совет - во всех условиях, где происходит какое ли изменение со списком вставьте вывод на экран. Вот благодаря таким контрольным точкам у меня и получилось самостоятельно ее решить.
ProgX11 уровень
3 мая, 18:10
Одно из условий по дублированию слова у меня было такое, это правильный вариант:
if (str.contains("л") && !str.contains("р")) {
                    i++;
                    list.add(i, str); //+1
                    }
Но изначально я использовал такой вариант, с префиксом, именно для того, что бы индекс уже присвоился в момент вычисления.
list.add(++i, str); //+0 ?????
Это не работало, когда прогнал в отладчике, то увидел, что именно в таком варианте нет разницы, что i++, что ++i отладчик показывает старое значение до присвоения. Как итог, не в тот индекс дублировалось слово. Притом эксперимент с выводом в консоль, дает ожидаемый результат.
int i=0;
        System.out.println(++i); //1
Кто объяснит?
Sergey13 уровень
22 апреля, 17:39
Ставь лайк, если "удваивать" понял как "сконкатенировать".
11 апреля, 06:14
если разбить задачу на 2 части то все легче. 1. сначала из списка вычленим слова с "р" для этого очень хорошо подходит метод removeIf() (я записал через лямбда выражение list.removeIf(x->x.contains("р") && !x.contains("л")); 2. дублируем слова с л. Здесь либо бежать по списку с конца и добавлять без проблем те кто содержит л и не содержит р либо бежать по списку с начала и добавлять, но при этом надо i++принудительно.
Nicolai Morari7 уровень
18 апреля, 17:38
с i++ принудительно не понравилась идея, поэтому решил предварительно сделать так:
int size = list.size();
чтобы избежать вечного цикла. и уже переменную size используешь для работы с циклом
Александр9 уровень, Москва
28 марта, 23:36
ура методу contains(). Сначала занимался сексом с методом toCharArray, но тогда нужно ещё внутренний цикл писать для поиска букавок. А зачем изобретать велосипед, если он и так изобретен ))).
Дмитрий Метельский20 уровень, Минск
28 марта, 20:24
Будем считать, что в моем случае задача не решена))) 1. Решение подглядел. 2. Народ, идете с конца, тогда не нужны манипуляции с I++ и I--. 3. Сделайте пустую проверку на содержание р и л. 4. Удачи Вам! А я пошёл разбираться со списками))))