Самая длинная строка

  • 10
  • Недоступна
Давайте померяемся строками! А заодно и задачку решим по программированию: создадим список строк, считаем с клавиатуры 5 штук и добавим их в список. Затем с помощью цикла найдем из списка самую длинную строку (или несколько, если она такая не одна). Страна должна знать своих героев: самые длинные строки будут выведены на экран.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (565)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maksym-Andriy
Уровень 14, Львов, Украина
23 сентября, 16:19
Можна ещё проще: - Написать функцию которая ищет максимально длинную строку и её индекс в массиве - Вызывать эту функцию в мэйне при условии что длина полученная при первом вызове будет равна длине при вызове второй раз и так далее(второй-третий, третий четвёртый...), при этом после каждого вызова удалять найденную строку по индексу. Описал сложно, но думаю понять должны
Vadim Zhalnin
Уровень 15
14 июля, 16:28
ИМХО задача не столько сложная, сколько многозадачная по сравнению с предыдущими. 1. Прописываем массив на 5 ячеек. 2. Прописываем сканер и ввод с консоли в массив (заполняем ячейки). 3. Далее нужно найти самую длинную строку. Сортируем строки по длине. Два цикла: основной while с условием boolean, вложенный for (int i = 1; i < 5; i++). Во вложенном if с условием сравнения длин строк (strings.get(i).length() > strings.get(i - 1).length()). Далее, если условие выполняется, переносим значения длин в две переменные String и переназначаем ячейки (strings.set(i, tmp2);). 4. Выводим ячейку 0 на экран (в любом случае длиннее её строк нет). И, в конце, еще один цикл - сравниваем длины оставшихся строк с длинной строки ячейки 0, в случае равенства выводим их на экран. Если вдумываться можно как-то проще, но такая задача не стоит.
Айрат
Уровень 16, Казань, Россия
14 июля, 11:10
Возможно кому то поможет: выводить на экран длину самой длинной строки не надо
Антон
Уровень 8, Санкт-Петербург, Россия
6 июля, 15:17
Подскажите, почему валидатор не принимает код? В консоли все работает как надо. Не выполняются условия "Программа должна выводить самую длинную строку на экран." и "Если есть несколько строк с длиной равной максимальной, то нужно вывести каждую из них с новой строки."
package com.javarush.task.task07.task0708;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

/*
Самая длинная строка
*/

public class Solution {
    private static ArrayList<String> strings;

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        strings = new ArrayList<>();
        ArrayList<String> maxOfStrings = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            strings.add(i, reader.readLine());
        }

        String max = strings.get(0);

        for (int i = 0; i < 5; i++) {
            if (strings.get(i).length() >= max.length()) {
                max = strings.get(i);
                maxOfStrings.add(max);
            }
        }

        for (int i = 0; i < maxOfStrings.size(); i++) {
            if (max.length() > maxOfStrings.get(i).length())
                maxOfStrings.remove(i);
        }

        for (int i = 0; i < maxOfStrings.size(); i++) {
            System.out.println(maxOfStrings.get(i));
        }
    }
}
Gonsalez
Уровень 7
29 июня, 15:23
Почему-то сразу в голову пришла мысль решить данную задачу через проверку строк на длину и удаление их из списка, если они не соответствуют максимальной длине, а затем вывод оставшихся строк на экран. Никак не мог правильно составить условие, в итоге решил, как и многие здесь. Но все же решил сделать так, как хотел изначально. На повторную проверку отправить не могу, вот интересно, пройдет ли валидацию такое решение? В условии вроде ничего про удаление не сказано, в IDEA вроде срабатывает как надо.
for (int i = 0; i < strings.size(); i++){
    int max = strings.get(0).length();
    if (strings.get(i).length() > max) {
        max = strings.get(i).length();
        strings.remove(i - 1);
        i = 0;

    } else if (strings.get(i).length() < max) {
        strings.remove(i);
        i = 0;
    }
}

for (int i = 0; i < strings.size(); i++) {
        System.out.println(strings.get(i));
       }
Сергей
Уровень 7, Калуга
1 июля, 13:46
Проходит
Дмитрий
Уровень 22, Нижний Новгород
15 июня, 17:50
int max = strings.get(0).length();
for (int i = 1; i < strings.size(); i++) {
    if (strings.get(i).length() > max) {
        max = strings.get(i).length();
    }
}
немного тупил из-за того, что в условии второго цикла for на автомате ввел 0, а после анализа, понял, что 0 присвоил изначально уже переменной max и нужно начинать с 1. P.S. может кому-то поможет)
just_DO_it
Уровень 18
13 июня, 01:17
Не проходит по 1, 3 и 4 пунктам Оо, что они от меня хотят? public class Line { private static ArrayList<String> strings = new ArrayList<String>(); public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for(int i = 0; i < 5; i++) { String s = reader.readLine(); strings.add(s); } String max = strings.get(0); for(String x : strings) { if (x.length() > max.length()) max = x; } for (String x : strings) if (x.length() == max.length()) System.out.println(x); } }
just_DO_it
Уровень 18
13 июня, 01:30
в IDEA все работает
just_DO_it
Уровень 18
13 июня, 01:39
при чем в следующей задаче на поиск наименьшей длинны сделал все так же, за исключением условия и все работает Оо
Roma Daujotas
Уровень 8
10 мая, 17:54
Решил задачу c 3 попытки, только потому что 1 пункт в требованиях не разрешил мне создать массив таким образом
ArrayList<String> list = new ArrayList<String>();
Правельное решение было таким.
private static ArrayList<String> strings;
strings = new ArrayList<>();
🤦‍♂️🤦‍♂️🤦‍♂️
Vrzesinsky
Уровень 11, Ярославль
22 апреля, 09:56
Сделал на так как в предложенном решении, но почему-то выводит ощибку.(запускал прогу, все работает корректно) public class Solution { private static ArrayList<String> strings; public static void main(String[] args) throws Exception { //напишите тут ваш код strings= new ArrayList<>(); BufferedReader reader= new BufferedReader(new InputStreamReader(System.in)); for(int i=0;i<5;i++){ String s= reader.readLine(); strings.add(s); } int max_s=strings.get(0).length(); for(int i=0;i<4;i++){ if(strings.get(i).length()>max_s){ max_s=strings.get(i).length(); } } for(int i=0;i<5;i++){ if(strings.get(i).length()==max_s){ System.out.println(strings.get(i)); } } } }
Kuksh
Уровень 14
26 апреля, 09:06
for(int i=0;i<4;i++){
            if(strings.get(i).length()>max_s){
                max_s=strings.get(i).length();
            }
Я так понимаю в счетчике дело? Попробуй i < 4 поменять на i < strings.size(); И в принципе так где это возможно лучше счетчики задавать через length и size. Ибо так на первый взгляд ошибок больше не вижу. Сам предыдущее задание "выражаемся покороче" решал как раз через size(); в счетчике и все прошло. Потом для интереса после успешной проверки решил узнать как предлагает решить JavaRush - они через for-each это делают - так что эту задачу я уже решил через 1 for для считывания с клавиатуры и 2 for-each для поиска максимума и перебора условия равенства строк с выводом.
Kateryna
Уровень 8
30 марта, 19:33
Какой-то суп из стрингов...