JavaRush
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Не проходит валидацию, при этом работает как надо
Salavat
17 уровень
  • 04.05.2018
  • 748просмотров
  • 7комментариев

Не проходит валидацию, при этом работает как надо

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

1. Создай список строк.
2. Добавь в него 10 строчек с клавиатуры.
3. Узнай, какая строка в списке встретится раньше: самая короткая или самая длинная.
Если таких строк несколько, то должны быть учтены самые первые из них.
4. Выведи на экран строку из п.3. Должна быть выведена одна строка.

Требования:
  • Объяви переменную типа список строк и сразу проинициализируй ee.
  • Программа должна считывать 10 строк с клавиатуры и добавлять их в список.
  • Программа должна выводить на экран самую короткую строку, если она была раньше самой длинной.
  • Программа должна выводить на экран самую длинную строку, если она была раньше самой короткой.
  • Должна быть выведена только одна строка.
package com.javarush.task.task07.task0712; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; /* Самые-самые */ public class Solution { public static void main(String[] args) throws Exception { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); ArrayList<String> str = new ArrayList<>(); for (int i = 0; i < 10; i++) { str.add(r.readLine()); } int min = str.get(0).length(); int max = str.get(0).length(); int indMin = 0; int indMax = 0; String a = null, b = null; for (int i = 0; i < str.size(); i++) { if (str.get(i).length() < min) { min = str.get(i).length(); } } for(int i=0; i < str.size(); i++){ if (str.get(i).length() > max) { max = str.get(i).length(); } } for(int i = 0; i < str.size(); i++){ if (str.get(i).length() == min) { indMin = i; a = str.get(i); } } for(int i = 0; i < str.size(); i++){ if (str.get(i).length() == max) { indMax = i; b = str.get(i); } } if(indMin < indMax) { System.out.println(a); } else { System.out.println(b); } } //напишите тут ваш код }
0
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
NodeOne
Уровень 41
Expert
23 мая 2018, 19:53
Вы в цикле где находите самую короткую строку сразу строку запоминайте. т.е.
for (int i = 0; i < str.size(); i++) {
            if (str.get(i).length() < min) {
                min = str.get(i).length();
                indMin = i;
                a = str.get(i);
            }
        }
так же и с indMax
0
Maxim
Уровень 20
23 мая 2018, 19:31
0. "как надо" код не точно не работает. 1.сократи массив с 10 до 3 и введи 1 2 3. потом 3 2 1, потом 2 3 1. посмотри результат. по итогу: вывод максимального и минимального значения не корректный во всех случаях. 2. решение можно сделать одним циклом for. у тебя их 5. 3. в 4 и 5 цикле у тебя идёт сравнение длин строк, но в выборку попадают Все похожие строки с их индексами, как следствие получается Перезапись indMax новым полученным индексом. 4. совет: нужен счетчик, тк нужное событие произойдет всего лишь Один раз. и будет или 0 или 1.
0
Andro812
Уровень 23
10 мая 2018, 21:45
for(int i = 0; i < str.size(); i++){
        if (str.get(i).length() == min) {
            indMin = i;
            a = str.get(i);
            }
        }
        for(int i = 0; i < str.size(); i++){
            if (str.get(i).length() == max) {
                indMax = i;
                b = str.get(i);
            }
        }
        if(indMin < indMax) {
         System.out.println(a);

        }
         else  {
          System.out.println(b);

        }
Если обнаруживаем, что str.get(i).length() == min или str.get(i).length() == max надо ли дальше бежать по списку и запоминать индексы и т.д.?
0
Salavat
Уровень 17
5 мая 2018, 20:21
Ольга, спасибо за подсказку! Ярослав прав, проблема пока не решена. indMin индекс присваивается корректно, а индекс min - последняя строка.
0
Ольга
Уровень 26
5 мая 2018, 13:50
Достаточно запоминать индексы максимальной и минимальной строк сразу при поиске. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; /* Самые-самые */ public class noname { public static void main(String[] args) throws Exception { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); ArrayList<String> str = new ArrayList<>(); for (int i = 0; i < 10; i++) { str.add(r.readLine()); } int min = str.get(0).length(); int max = str.get(0).length(); int indMin = 0; int indMax = 0; for (int i = 0; i < str.size(); i++) { if (str.get(i).length() < min) { min = str.get(i).length(); indMin = i; } } for(int i=0; i < str.size(); i++){ if (str.get(i).length() > max) { max = str.get(i).length(); indMax = i; } } if(indMin < indMax) { System.out.println(str.get(indMin)); } else { System.out.println(str.get(indMax)); } }
0
Ярослав Java Developer Master
5 мая 2018, 14:49
Проблема так и не решена. И можно сразу искать минимум и максимум.
0
Ярослав Java Developer Master
4 мая 2018, 20:45
Если таких строк несколько, то должны быть учтены самые первые из них. У вас всегда сохраняется последний индекс минимальной строчки и максимальном. Таким образом, если будет последовательность: ааа аааа аааа ааа То у вас будет выводиться строчка аааа, хотя должна была бы ааа, так как она встретилась раньше.
+2
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush