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

  • 10
  • Недоступна
Давайте померяемся строками! А заодно и задачку решим по программированию: создадим список строк, считаем с клавиатуры 5 штук и добавим их в список. Затем с помощью цикла найдем из списка самую длинную строку (или несколько, если она такая не одна). Страна должна знать своих героев: самые длинные строки будут выведены на экран.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (575)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений
Уровень 7
6 мая, 16:55
Если при вводе строк сразу искать самую длинную строку, то задачу можно решить в два цикла,
Ирина
Уровень 8, Полтава, Украина
6 февраля, 17:13
Кто может объяснить комбинацию: for (String string : strings)
Павел Соловьёв докер - механизатор в Порт
22 февраля, 04:13
Расширенный цикл for работает следующим образом. В расширенном цикле for происходит последовательный перебор всех элементов коллекции или массива. Количество итераций цикла равна количеству элементов в коллекции или массиве. На каждой итерации значение элемента массива помещается в итерационную переменную variable(в вашем случае sting), которую можно обрабатывать или использовать. Цикл гарантирует прохождение всей коллекции (массива) от первого элемента до последнего. еще раз , это цикл for в котором как переменная используется "String peremennaya" которая проходит по всей коллекции/массиву ": massiv" .
528
Уровень 14
11 апреля, 18:46
не поверите, но тоже самое хотел спросить после сверки с решением этой задачи, я думал я один пропустил эту тему :) а её похоже не было
Elidriel
Уровень 35, Воронеж
27 ноября 2021, 12:25
в принципе легко.. в три цикла: 1) первый заполняет массив; 2) второй проходит по всему массиву (foreach очень удобен для этого) и операцией сравнения созданной переменной max с длины каждого элемента (string.length()) присваиваем переменной max длину самой длинной строки; 3) третий проходит по всему массиву (foreach очень удобен для этого) и сравниваем длину каждого элемента с полученной в предыдущем цикле максимальной длиной, если совпадает -выводим на экран.
YesOn
Уровень 8, Томск, Россия
16 декабря 2021, 14:40
Спасибо, долго мучил 4 условие задачи, Ваша схема помогла взглянуть на свой код иначе.
Andrey Ganin
Уровень 13, Воронеж
25 января, 14:14
Интересное решение, но моё мне понравилось больше))) Я решил задачу через 2 массива, сначала заполнил первый, затем что бы ошибки не было, во второй массив я добавил "" таким образом, с ним теперь можно работать, ведь строка там есть, но она содержит 0 элементов. Далее я поочерёдно сравнил длину строки второго массива с первым и если в первом массиве длинна строки больше, то второй массив мы очищаем и заносим туда новое значение. Если длинна строк совпала просто добавляем ещё одну строку. А в конце просто выводим второй массив.
Lunycat
Уровень 17, Россия
2 ноября 2021, 15:19
Надеюсь поможет :) Как сделал я: 1) Создал цикл с заполнением ArrayList ' а - это делается очень легко, надо листануть страницу назад в лекциях, там показано. 2) Создал переменную "max" типа int. Создал цикл по проверке массива, который ищет самую длинную строку в массиве, если такая находится, он приравнивает цифру(количество символов) к переменной "max". Код такой: "strings.get(i).length()". Где "strings" - наша статическая переменная типа ArrayList, ".get(i)" - вывод элемента под индексом "i", и ".length()", которая считает количество символов в этом элементе. 3) В конце цикла создал ответвление - если цикл подошёл к концу, то он переходит к новому циклу, который точно так же проверяет, этот же массив. Но его функцией является нахождение элементов, чьё количество символов == переменной "max". Если такой элемент находится, он выводится на экран. 4) ?????? 5) PROFIT!!!!!
Maksym-Andriy
Уровень 14, Львов, Украина
23 сентября 2021, 16:19
Можна ещё проще: - Написать функцию которая ищет максимально длинную строку и её индекс в массиве - Вызывать эту функцию в мэйне при условии что длина полученная при первом вызове будет равна длине при вызове второй раз и так далее(второй-третий, третий четвёртый...), при этом после каждого вызова удалять найденную строку по индексу. Описал сложно, но думаю понять должны
Vadim Zhalnin
Уровень 17
14 июля 2021, 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, в случае равенства выводим их на экран. Если вдумываться можно как-то проще, но такая задача не стоит.
Айрат
Уровень 18, Казань, Россия
14 июля 2021, 11:10
Возможно кому то поможет: выводить на экран длину самой длинной строки не надо
Антон
Уровень 8, Санкт-Петербург, Россия
6 июля 2021, 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 июня 2021, 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));
       }
Сергей
Уровень 9, Калуга
1 июля 2021, 13:46
Проходит
Galymzhan
Уровень 15, Новосибирск
9 декабря 2021, 08:57
прошло, только вот с не совсем понял как работает strings.remove(i-1); i= 0; почему необходимо удалять предыдущий элемент массива i-1. а затем выполнять i =0. можешь пожалуйста пояснить?
528
Уровень 14
11 апреля, 19:28
первый круг i = 0 2 строка - не доходя до первого if, присваиваем переменной max элемент коллекции с индексом 0 strings.get(0).length() 3 строка - strings.get(0).length() > max, при первом обходе цикла всегда будет false 8 строка - снова false второй круг i = 1 2 строка - снова присваиваем переменной max элемент коллекции с индексом 0 3 строка - сравниваем max (он же strings.get(0).length()) с элементом i-тым (1) элементом коллекции если i-тый (1) элемент больше, в 5 строке удаляем i - 1 (0) элемент коллекции если i-тый (0) элемент меньше, в 9 строке удаляем i (1) элемент коллекции 6 строка и 10 строка соответственно i = 0, перед запуском следующего круга i++ таким образом мы сравниваем 0 и 1 элементы, попутно удаляя ненужные ты уже на 15 уровне, скорее всего сам разобрался)
Дмитрий
Уровень 26, Нижний Новгород
15 июня 2021, 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. может кому-то поможет)