Р или Л

  • 10
  • Недоступна
Друзья секретного центра JavaRush с планеты Ки-Тай столкнулись с одной нестандартной для нас проблемой: они плохо различают буквы «р» и «л». Мы решили им помочь следующей задачей. В созданном списке слов экспериментальный метод fix будет удалять из списка строк все слова, содержащие букву «р», а все слова, содержашие букву «л» — удваивать.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (714)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
anufrievdima Работает в ВТБ
3 августа, 14:47
Подглянул в обсуждение что бы познакомится с contains() Итог с 2х попыток, потому что забыл написать условие которое ничего не делает со словами, которые не содержат ни букву л, ни букву р
piersto
Уровень 17, Montreal, Canada
22 июня, 02:04
Не понимаю решение, которое предлагает Javarush. Как у них удваиваются все слова содержащие букву "л"? Может кто подскажет? https://gist.github.com/piersto/25d5a73cb33b818b81152e1f759da0ae Так как задача решена, то я не могу задать вопрос в разделе "Помощь"
Alexander
Уровень 14
10 июля, 10:44
Привет, решение от джврш и вправду очень инетерсное, дело в последовательности исполнения цикла. Я попробую распистаь все более подробно, мб кому будет интересно как и мне) Короче говоря наш цикл в методе fix делает 3 действия: 1. 1 ифом мы проверяем наличие буквы "р" и осутсвие "л", в таком случае мы не добавляем в массив ничего, а просто выходим из него не проходя следующие шаги, за это отвечает continue;( обратите внимание на использование именно continue, ведь использование break остановило бы весь цикл еще после проверки, в нашем случае, 1 слова) 2. 2 ифом, в котором и скрыт весь фокус, мы проверям наличие буквы "л" и остутсвие буквы "р", если наше слово подходит условию, то мы добавляем его в массив и переходим к 3 пункту. 3. Но, в 3 части кода мы все равно добавляем проверочное слово в массив, трюк в том, что если слово с "л" и без "р" то оно добавляется и во втором шаге и в третьем, ведь добавив слово во втором ифе мы не выходим из цикла, а доходим до самого конца. На практике слово "лоза" не проходит 1 шагом(так как у нас есть "л" в слове), но проходит 2 шагом (есть "л" но нет "р" и добавляется в массив) и проходит 3 шагом ( им пройдет любое слово не содержащее комбинацию букв "р" и "л" к примеру "дом").
Максим Белоусов
Уровень 13, Москва, Россия
16 июня, 08:43
Пару часов на понимание что без создания нового списка не обойтись. Пару часов на правильное описание логики, ибо флажки в виде булевых переменных пока делать сложно.
Popka
Уровень 11, Белгород, Россия
3 августа, 18:35
можно и без нового списка. Просто сначала удвоить "Лозу" с помощью одного цикла, а затем с помощью другого цикла ВНИМАНИЕ в обратном порядке, это важно, убрать все "розы". И тогда все легко и просто работает
Alexx Dorofeev
Уровень 9, Санкт-Петербург
6 июня, 12:33
Встретил в этой задаче две сложности: 1) Нагуглить про поиск символа в строке; 2) Не затупить что в случае добавление новой строки в массив в цикле при следующей итерации нужно перепрыгнуть добавленное слово, иначе цикл уходит в бесконечное путешествие) всем УДАЧИ !)
Андрей Глебовский
Уровень 7, Санкт-Петербург
1 июня, 14:36
Я прошёл это задание через индексацию содержащихся в строчках букв - ***.indexOf("р"); ***.indexOf("л"). Если индекс = -1, значит буквы нет. Есть подвохи в УЖЕ написанных строчках. Надо быть внимательней!
Анисимова Юлия
Уровень 16, Киев
19 мая, 14:19
Привет. Подскажите плз, почему ругается на Метод fix должен удалять из списка строк все слова, содержащие букву "р". Исключение: слова содержащие и букву "р" и букву "л" - их нужно оставить. Он у меня и удаляет. if (strings.get(i).contains("р") && !strings.get(i).contains("л")) strings.remove(i); if (strings.get(i).contains("л") && !strings.get(i).contains("р")) strings.add(strings.get(i));
Alexx Dorofeev
Уровень 9, Санкт-Петербург
6 июня, 12:36
предположу что нужно делать через else if, плюс не ясно как вы итератор наращиваете)
Naryuk
Уровень 11, Казахстан
15 августа, 11:25
if (strings.get(i).contains("р") && !strings.get(i).contains("л"))
strings.remove(i);
По-моему, здесь лишний оператор отрицания (!), поэтому условие не срабатывает
Simpson
Уровень 10, Белгород, Россия
27 апреля, 07:56
наконец то. два дня, 132 попытки. кусочек кода дам, чтобы другим было полегче. else if(c && !b) {strings.add(i, a); i++; } это где добавление слова в списочный массив если у слова есть буква "л".
Anton
Уровень 13, Москва
22 апреля, 07:47
Зачем выкладывать готовые решения в обсуждения??
Оксана
Уровень 9, Бергхайм, Германия
15 марта, 16:25
Написала изначально рабочий код, но ошибка была в том, что в "strings.get(i).contains("р")", вместо русского р написала латинское p на автомате. Переделывала его не скажу сколько раз, пока поняла в чем ошиблась. Может кому будет полезно)) for (int i = 0; i < strings.size(); ) { //нет увеличения i внутри цикла if (strings.get(i).contains("р")&&!strings.get(i).contains("л") ) //если содержится р и нет л { strings.remove(i); //удаляем этот элемент и поэтому не изменяем значение счетчика } else { if (!strings.get(i).contains("р") && strings.get(i).contains("л")) {//если содержится л и нет р strings.add(i+1, strings.get(i)); //дублируем слово следом за этим элементом i += 2;//увеличиваем счетчик на 2, так как произвели вставку } else //для всех остальных вариантов комбинации букв i++; //счетчик увеличиваем на 1 только если оставляем слово без изменений }
IGuruI Работает в Orange
17 марта, 18:57
можно было стандартно for сделать c i++, только в первом if i--, во втором i++
Alexander Sterkhov
Уровень 25, Москва
4 марта, 08:27
А что это за конструкция такая "String string : strings" ? впервые вижу
Mister Khokhma
Уровень 20, Кемерово
6 марта, 10:42
это цикл for each для перебора всех элементов в массиве. тут перебираются все элементы и каждый печатается на экран.
Alexander Sterkhov
Уровень 25, Москва
6 марта, 11:02
Спасибо) Я потом уже дошел до этой лекции) Но по началу вызвало недоумение)