JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/В Idea все проходит, но при проверке появляется ошибка с ...
Vladimir
19 уровень
  • 12.04.2020
  • 532просмотров
  • 21комментариев

В Idea все проходит, но при проверке появляется ошибка с условием когда в слове есть "л" и "р"

Вопрос по задаче Р или Л
Java Syntax,  7 уровень,  9 лекция
Обсуждается


1. Создай список слов, заполни его самостоятельно.
2. Метод fix должен:
2.1. удалять из списка строк все слова, содержащие букву "р"
2.2. удваивать все слова содержащие букву "л".
2.3. если слово содержит и букву "р" и букву "л", то оставить это слово без изменений.
2.4. с другими словами ничего не делать.

Пример:
роза
лира
лоза

Выходные данные:
лира
лоза
лоза

Требования:
  • Программа не должна считывать данные с клавиатуры.
  • Метод fix должен удалять из списка строк все слова, содержащие букву "р". Исключение: слова содержащие и букву "р" и букву "л" - их нужно оставить.
  • Метод fix должен удваивать слова, содержащие букву "л" (добавлять еще один элемент с этим словом). Исключение: слова содержащие и букву "л" и букву "р" - их не нужно удваивать.
  • Метод fix не должен ничего делать со словами, содержащими и букву "л" и букву "р".
  • Метод fix не должен ничего делать со словами, которые не содержат ни букву "л", ни букву "р".
....
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.add("лоза"); 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) { //напишите тут ваш код for(int i =0;i<strings.size();) { String a = strings.get(i); if (a.contains("л") && !a.contains("р")) { strings.add(i++,a); i=i+2; } else { if (a.contains("р") && !a.contains("л")) { strings.remove(i); }else{ i++; } } } return strings; } }
0
Комментарии (21)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Гофф
Уровень 3
Master
13 апреля 2020, 21:40
Лишняя пара фигурных скобок. Последний елсе у тебя внутри другого елсе
0
Стас ПасинковSoftware Developer в ZipyMaster
14 апреля 2020, 04:26
мне кажется запись
if (...) {
    ...
} else if (...) {
    ...
} else {
    ...
}
эквивалентна записи
if (...) {
    ...
} else { if (...) {
        ...
    } else {
        ...
    }
}
просто в первом случае else без фигурных скобок
0
Гофф
Уровень 3
Master
14 апреля 2020, 06:45
Да, согласен. Мне тоже стало так казаться, но уже после публикации поста.
0
Гофф
Уровень 3
Master
14 апреля 2020, 07:07
А интересно, сейчас не могу сам проверить, вот такое:
if (a.contains("л") && !a.contains("р")) strings.add(++i++, a);
сработает?
0
Стас ПасинковSoftware Developer в ZipyMaster
14 апреля 2020, 07:29
int a = 0;
int b = ++a++;
System.out.println(a + " " + b);
не компилится( ругается на часть где а++ unexpected type: required variable, found value
0
Гофф
Уровень 3
Master
14 апреля 2020, 18:59
Спасибо, только к компу попал, думал пробью тему - а вот уже) Но жалко, красиво выглядит. Симметричненько)
+1
Андрей
Уровень 3
13 апреля 2020, 19:32
Попробуй создать отдельную переменную, которую увеличивай на 1 при 'л' и уменьшая при 'р'. Только не забудь переходить на следующий шаг цикла если добавил слово (дополнительное i++ в теле цикла) и на предыдущий шаг, если удалил слово (i--)
0
Vladimir
Уровень 19
13 апреля 2020, 19:09
Мне кажется у JAva rush тут есть bug...
0
Стас ПасинковSoftware Developer в ZipyMaster
14 апреля 2020, 03:51
нет. баг у вас в коде :) и не один
0
Гофф
Уровень 3
Master
14 апреля 2020, 19:01
В явераш тоже много багов)) Я вот время от времени баг...
0
Андрей Чубов
Уровень 41
13 апреля 2020, 18:02
Удаление лучше сделать в отдельном цикле. strings.remove(i); i--;
0
Vladimir
Уровень 19
13 апреля 2020, 19:10
почему?
0
Андрей Чубов
Уровень 41
13 апреля 2020, 21:06
При удалении или добавлении размерность lista изменяется и соответственно изменяются индексы элементов. Удалять нужно в отдельном цикле чтобы не было ошибок. при удалении счетчик i --
0
Vladimir
Уровень 19
14 апреля 2020, 19:08
не всегда нужно делать i-- 😎
0
Андрей Чубов
Уровень 41
15 апреля 2020, 14:21
это как один из вариантов , я такой вариант использовал. Никто не заставляет попробовать по другому это же искусство.
0
Стас ПасинковSoftware Developer в ZipyMaster
13 апреля 2020, 00:58
strings.add(i++,a);
i=i+2;
если перед этим кусоком кода значение i было 0 - каким оно будет после него? ну и как вы думаете на какую позицию в списке запишется а в таком случае :)
0
Vladimir
Уровень 19
13 апреля 2020, 19:03
будет i = 2 , "а" запишется на i=1 . Или бывает как то по другому?
0
Dimantchick
Уровень 36
14 апреля 2020, 03:33
I = 3 Не путайте i++ выдает 0 после чего делает i = i + 1; Т.е. вы добавляете в 0 позицию, увеличиваете i на 1, а потом еще увеличиваете на 3. И еще вы удаляете элемент, но зачем-то делаете и++. У вас же остальные элементы сдвинуться на текущую позицию. Важно. Будьте очень внимательны при обходе коллекции с удалением элементов. У людей в этой части очень часто возникают ошибки, связанные с обращением к индексу, которого уже нет в коллекции! Т.е. был список из 10 элементов, вы удалили первые 2 и идете дальше, пытаясь проверить 9 элемент.
+1
Стас ПасинковSoftware Developer в ZipyMaster
14 апреля 2020, 03:50
да, по-другому. во-первых, i будет равно 3 (Dimantchick уже объяснил) во-вторых, a запишется на нулевую позицию. проверьте сами, если мне не верите) после чего разберитесь чем отличаются префиксный и постфиксный инкременты
0
Vladimir
Уровень 19
14 апреля 2020, 19:07
Привет!) Да. с i++ ошибся, от сюда и I=I+2 написал и все ок... if (a.contains("л") && !a.contains("р")) { strings.add(++i, a); i++; } Остальное все было верно. когда я удаляю элемент,я вообще не изменяю индекс. там написано else{ i++; } Спасибо!
0
Andrey Pirogov
Уровень 1
Expert
12 апреля 2020, 19:57
ошибка не столь очевидна, логика не срабатывает только при определенных комбинациях, попробуй вот такой список: strings.add("мерра"); strings.add("рорза"); strings.add("мела"); strings.add("роза"); strings.add("лира"); strings.add("вода"); strings.add("упор");
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush