package com.javarush.test.level07.lesson06.task02;

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

/* Самая длинная строка
1. Создай список строк.
2. Считай с клавиатуры 5 строк и добавь в список.
3. Используя цикл, найди самую длинную строку в списке.
4. Выведи найденную строку на экран.
5. Если таких строк несколько, выведи каждую с новой строки.
*/
public class Solution
{
public static void main(String[] args) throws Exception
{
ArrayList l1 = new ArrayList ();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 5; i++)
{

l1.add(reader.readLine());
}
for (int i = 1; i < l1.size();)
{

String a = l1.get(i-1);
String b = l1.get(i);
if (a.length() > b.length()) l1.remove(i);
else if (a.length() < b.length()) l1.remove(i-1);
else i++;
}
for (int i = 0; i < l1.size(); i++)
{

System.out.println(l1.get(i));
}
}
}

Вроде работает нормально, но не проходит тестирование

задан 04 Сен '15, 02:46

Skalapendr's gravatar image

Skalapendr
6116
одобрено: 13%

изменено 04 Сен '15, 02:55


123вперед »

Ты можешь напрямую обратиться к i-тому элементу, без посредника (текстовой переменной)

int a = list.get(i).length();
ссылка

опубликован 04 Сен '15, 10:41

%D0%9C%D1%96%D0%BA%D1%96%D1%82%D0%B0's gravatar image

Мікіта
1125
одобрено: 50%

Спасибо!) Вот хотите не верьте, но я клянусь, что я сразу так пробовал, а IntelliJ get красным выделял.(ну мож чо напутал)

А человек который специально не стал писать мог бы как-то намекнуть. словами. Бестолковый ответ типа сначала погугли, потом прочитай все книжки, потом пойди в институте отучись на соответствующем направлении а потом задавай вопрос.

(04 Сен '15, 12:34) Skalapendr

О господи, я специально не стал писать эту строку, вы бы ещё готовый код выложили, пусть человек сам всему научится.

(04 Сен '15, 10:55) Red_Fusion

Убил тучу времени на эту задачу, искал ответ повсюду, пока наконец не понял, насколько все на самом деле просто.

Не нужно находить несколько самых длинных строк, нужно найти лишь одну!

Первое — считываем 5 строк из консоли, помещаем их в список. Второе — проходим по длине строк в списке, определяем самую длинную и присваиваем ее длину int-переменной.

 int max = list.get(0).length();

    for (int i = 1; i < list.size(); i++){
        if (list.get(i).length() > max){
            max = list.get(i).length();
        }

Третье — проходим циклом по нашему списку и определяем строки, длина которых равна(!) значению max и добавляем их всех в новый список. Четвертое — выводим этот список на экран.

ссылка

опубликован 07 Окт '15, 18:18

olegshan's gravatar image

olegshan
532
одобрено: 0%

изменено 14 Ноя '15, 17:14

Сначала нужно найти максимальную длину:

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

Потом нужно, вывести все строки с максимальной длинной

for (int i = 0; i < 5; i++) {
            if (max == list.get(i).length()) {
                System.out.println(list.get(i));
            }
        }

Все намного проще.

ссылка

опубликован 03 Авг '16, 03:54

Redissskin's gravatar image

Redissskin
612
одобрено: 0%

Есть несколько ошибок:

1)Что за объявление ArrayList без типа? Из-за этого в строках 28, 29 вы присваиваете строке объект.

2)Зачем-то создаёте 2 переменных типа String a и b? Создайте 1 переменную целого типа, в которой будет содержаться длина строки и сравнивайте с остальными строками.

3) Я ввел:

1

11

22

333

4444

Мне вывело

11

4444

ссылка

опубликован 04 Сен '15, 03:39

Red_Fusion's gravatar image

Red_Fusion
410513
одобрено: 37%

изменено 04 Сен '15, 03:47

Чесно говоря, условие этой задачи можно интерпритировать по разному, будем идти по порядку. Я буду коментировать Ваш код.

/* Самая длинная строка
1. Создай список строк.
2. Считай с клавиатуры 5 строк и добавь в список.
3. Используя цикл, найди самую длинную строку в списке.
4. Выведи найденную строку на экран.
5. Если таких строк несколько, выведи каждую с новой строки.
*/
public class Solution
{
 public static void main(String[] args) throws Exception
 {
    ArrayList<String> l1 = new ArrayList<String>(); // Создаю список 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    //Ввожу 5 строк с клавы
    for (int i = 0; i < 5; i++)
    {
        l1.add(reader.readLine());
    }
    //Здесь нахожу максимальную длинную строку
    int maxL = l1.get(0).length();
    for (int i = 1; i < l1.size();i++)
    {
        if (maxL < l1.get(i).length()){
            maxL = l1.get(i).length();
        }
    }
**//До этого момента все хорошо. Но давайте еще раз прочитаем условие,
 //можно подумать что нас просят вывести макисмально длинную стоку на экран 
 //помимо пункта 5(т.е. 1раз сейчас и 1раз потом(или два+ если есть повторение),
//но это не так, нас просят вывести строку на экран и ЕСЛИ длина нашей строки 
//совпадает еще с некоторым количеством строк,то вывести и их.
//В любом случае для того что бы вывести макс строку вне цыкла надо писать
//System.out.println(list.get(maxL));
**
    System.out.println(maxL); //находит верно
    //здесь удаляю все элементы массива длины которых меньше максимальной
    for (int i = 0; i < l1.size();i++){
        if (l1.get(i).length() < maxL) {
            l1.remove(i);
        }
    }
//Ничего удалять ненадо, нас просят ВЫВЕСТИ, а не удалить
//Попробуйте реализовать через цыкл такое условие:
//если макс.длинна равно любой другой длинне елемента l1
//то в консоль будет выводиться этот елемент
    //Вывожу оставшиеся
    for (int i = 0; i < l1.size(); i++)
    {
        System.out.println(l1.get(i));
    }
}

}

ссылка

опубликован 08 Сен '15, 05:25

Zvezdochet's gravatar image

Zvezdochet
911210
одобрено: 17%

1

В условии сказано 4. Выведи найденную строку на экран. если мы пишем System.out.println(maxL); то выводим ДЛИНУ строки (например если слово "text" то выведет 4), а от нас хотят вывода строки поэтому нужно писать System.out.println(list.get(max)); Но повторюсь, это так, отступление в сторону, по условию это все решаеться в цыкле. С циклом разобрались? Вот примерно так.

     for (int i = 0; i < list.size(); i++) {
        if (max == list.get(i).length()){
            System.out.println(list.get(i));
        }
     }
(08 Сен '15, 06:30) Zvezdochet

Спасибо за помощь! Но дело в том что я полез исправлять и свежим взглядом нашел у себя ошибку. В цикле где я удалял строки i++ надо было перенести в блок условия, как я делал это в в самом первом варианте.

Попробовал и все прошло проверку)))

Но Ваш вариант (с выводом строк сразу, без удаления) на много лучше! Не нужен последний цикл. Не знаю. чо я так ступил). Но как такой вариант проходит проверку я не скажу потому, что...все)))

Только я не понял System.out.println(list.get(maxL))? Ведь maxL - это переменная равная равная длине самой длинной строки, а не индексу.

(08 Сен '15, 06:21) Skalapendr

Спасибо. Но я не пойму как взять длину строки i ого элемента из массива? Т.е. я создаю переменную String, присваиваю значение iого элемента, а потом беру длину строки переменной и сравниваю... Можно это сделать компактнее?

ссылка

опубликован 04 Сен '15, 04:22

Skalapendr's gravatar image

Skalapendr
6116
одобрено: 13%

Блин! точно! гугл! Спасибо красный фузион! Представляю какими язвительными были бы Ваши коментарии если б я Вас не наградил ранее одним баллом.

(04 Сен '15, 10:08) Skalapendr

Можно, к примеру есть строка

String s = "Vasya" int max = s.length();

Неужели гугл не работает? Что мешает ввести в поисковике работа со строками java?

(04 Сен '15, 09:40) Red_Fusion

Ошибка в логике все равно осталась( Переделал так:

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<String> l1 = new ArrayList<String>(); // Создаю список
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        //Ввожу 5 строк с клавы
        for (int i = 0; i < 5; i++)
        {
            l1.add(reader.readLine());
        }

        //Здесь нахожу максимальную длинную строку
        int maxL = l1.get(0).length();
        for (int i = 1; i < l1.size();i++)
        {
            if (maxL < l1.get(i).length()){
                maxL = l1.get(i).length();
            }
        }

        System.out.println(maxL); //находит верно

        //здесь удаляю все элементы массива длины которых меньше максимальной
        for (int i = 0; i < l1.size();i++){
            if (l1.get(i).length() < maxL) {
                l1.remove(i);

            }
        }

        //Вывожу оставшиеся
        for (int i = 0; i < l1.size(); i++)
        {
            System.out.println(l1.get(i));
        }
    }
}

Но не работает. В чем ошибка?

ссылка

опубликован 05 Сен '15, 01:31

Skalapendr's gravatar image

Skalapendr
6116
одобрено: 13%

Всем привет.У меня не большая проблема. Я задачу решил.Еле еле.Многое перепробовал но в итоге решил.Я не знаю каким образом находится самое длинное слово?Вот приложение кусочка кода,который я никак не могу понять как работает. Я уже добавил 5 строк с клавы.И теперь этот кусочек кода пройдет с помощью цикла for s.size() (5) раз.

ArrayList<String>s = new ArrayList<String>(); int max = s.get(0).length(); for(int i=0;i<s.size();i++){ if(max<s.get(i).length()){ max=s.get(i).length(); } }

а как он запоминает самое длинное слово и сохраняет в себя его? У меня голова уже не варит.

ссылка

опубликован 01 Окт '15, 15:09

sega__13's gravatar image

sega__13
11
одобрено: 0%

изменено 02 Окт '15, 02:36

что такое s.get(i).length() ?

ссылка

опубликован 01 Окт '15, 16:50

Skalapendr's gravatar image

Skalapendr
6116
одобрено: 13%

Skalapendr.Добавил что такое s.get(i).length().Извиняюсь,забыл.

ссылка

опубликован 02 Окт '15, 02:33

sega__13's gravatar image

sega__13
11
одобрено: 0%

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×8

Задан: 04 Сен '15, 02:46

Просмотров: 9,378 раз

Отредактирован: 19 Янв, 10:20