Р или Л

  • 10
  • Недоступна
Друзья секретного центра JavaRush с планеты Ки-Тай столкнулись с одной нестандартной для нас проблемой: они плохо различают буквы «р» и «л». Мы решили им помочь следующей задачей. В созданном списке слов экспериментальный метод fix будет удалять из списка строк все слова, содержащие букву «р», а все слова, содержашие букву «л» — удваивать.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (736)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
RomanGV
Уровень 12, Россия
16 июня, 12:59
Да блииин... В который раз уже😤 Опять столкнулся с тем, что я неправильно определяю границы индексов массивов и списков. То последнюю букву пропускаю, то последнее слово не проверяю...😐 Будьте внимательны.
for (int j = 0; j < word.length() - 1; j++) { // ВОТ ТАК НЕПРАВИЛЬНО! ПОСЛЕДНЯЯ БУКВА НЕ БУДЕТ ПРОВЕРЯТЬСЯ
    if (word.charAt(j) == 'р') toRemove = true;
    if (word.charAt(j) == 'л') toDouble = true;
}
for (int j = 0; j < word.length(); j++) // ВОТ ТАК ПРАВИЛЬНО
Roman
Уровень 12, Минск
3 мая, 14:08
Вышло решение с добавлением элемента сразу за тем, в котором есть только "л". До этого пол дня пытался сделать просто с добавлением элемента в конец списка, но цикл уходит в бесконечность, т.к. последние элементы начинают повторяться, а мысли как это остановить нет.
AmigoDjeck
Уровень 9
18 апреля, 18:51
Задача заставила полезть в дебри через char, в итоге сокращаем решение с помощью contains.
Евгений N
Уровень 12
5 апреля, 14:53
как-то условия нечетко проверяют!!! в условии не "результат не должен содержать слова, содержащие букву "р"" а прямо написано "удалять из списка" foreach не подошел, for => java.lang.OutOfMemoryError. в итоге всё же решил без второго ArrayList (т.е. добавляю и удаляю из основного списка)! используя while и помимо основного счетчика i++ дополнительно при дублировании strings.add(i++,s ) и strings.remove(i--) при удалении;
Dffay
Уровень 9
22 февраля, 09:34
решил через метод indexOf. Прописал несколько if-else и включил туда проверки по indexOf
YesOn
Уровень 8, Томск, Россия
17 января, 04:02
Мозговыносящая задача. Так и не понял, зачем же каждый раз в условии на букву "р" прописывать && !"л", а про "л" тоже прописывать && !"р" Зачем прописывать отрицание? Почему условие просто на проверку буквы не проходит без этого? Кто-нибудь может объяснить? Буду благодарен.
Andrew
Уровень 16, Москва, Россия
19 января, 09:23
смотрите, в данной задаче можно применить подход "от обратного", т.е. вместо того, чтобы удалять ненужные слова из существующего списка, можно создать новый список, в который записывать только НУЖНЫЕ слова. Для этого у нас есть метод, который принимает наш list. В этом методе создается новый пустой список, где должны отсутствовать те слова, в которых есть буква "р", но нет "л", удваиваться слова (заноситься в новый список 2 раза), где есть буква "л", но нет "р", а остальные слова должны остаться без изменений, т.е. просто занесены в новый список только один раз. Что делает метод: он пропускает последовательно циклом for each каждое слово из того списка, который ему передали, через некое отборочное "сито". А логика этого сита прописана в условиях. У нас заданы две булевых переменных, isR и isL, если слово из списка содержит соответствующую букву, то переменной присваивается значение "true". Первое проверяемое условие отбора - если содержится "р" и не содержится "л", и оно истинно, то нас инструкция continue отправляет на следующую итерацию, т.е. проверенное слово в новый список не включается. Если же условие ложно, то слово проходит вторую проверку, если буквы "р" нет, а есть только "л", то слово заносится в список 2 раза, потому что последним оператор добавляет любое слово, где нет двух предыдущих условий
YesOn
Уровень 8, Томск, Россия
19 января, 13:45
Andrew, спасибо за такое подробное объяснение, такой подход я не рассматривал.
Dmitry
Уровень 12
10 января, 03:59
сидел полдня и голова опухла, не помогали даже советы из коментариев😬.... утром сел и записал с первого раза😀 😀😀 вот что значит чистый мозг. Спасибо тебе товарищ Булат, за метод contains().
Neonila Kravtcova
Уровень 19, Санкт-Петербург, Россия
14 ноября 2021, 18:39
С первой попытки. Но думала, что будет ругаться, что не учла регистр. Если поставить "Роза", то contains("р") уже не посчитает её за "розу" и она останётся в списке. Тогда нужно было бы применть понижение регистра через s.toLowerCase.contains().
vk
Уровень 26, Санкт-Петербург, Россия
Master
1 декабря 2021, 07:34
Требования: Метод fix должен удалять из списка строк все слова, содержащие букву "р". Только букву "р", а не буквы "р", "Р".
Neonila Kravtcova
Уровень 19, Санкт-Петербург, Россия
1 декабря 2021, 07:40
Да-да, спасибо, вы правы. Правило остаётся - всегда внимательно читаем условие.
Эльдар
Уровень 18, Ростов-на-дону
16 октября 2021, 23:01
79 попыток
Николай
Уровень 10, Днепр, Украина
4 февраля, 17:38
Настойчиво, даже упрямо!!!!
Булат
Уровень 10, Набережные Челны, Россия
12 октября 2021, 13:57
Дорогой друг, если ты сюда зашел, ты явно в замешательстве и тебе нужна помощь. Загугли метод contains() и ты найдешь все ответы. Удачи!
Sergey
Уровень 12, Анапа, Россия
31 октября 2021, 13:09
хахах)) хороший комментарий. правда я сюда зашел других фишечек поискать в комментариях. но лайк)