Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2016, 08:18   #11
nevender
Пользователь
 
Регистрация: 03.01.2016
Сообщений: 59
По умолчанию

Спасибо, Ваши сообщения помогли. Вот только непонятно, вроде программа работает правильно, но проверку на сайте все равно не проходит.

Возник кстати вопрос, add - это добавить в определенное место в ArrayList, а что такое тогда ArrayList.set(i,s)?

Код:
package com.*

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
    {
        //напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list1 = new ArrayList<String>(); // заполняемый пользователем массив
        ArrayList<String> list2 = new ArrayList<String>(); // массив с самыми длинными строками

        for (int i = 0; i < 5; i++) // заполняем 1 массив
        {
            String s = reader.readLine();
            list1.add(i, s); 
        }
        int n = 0;
        String max = list1.get(0); // устанавливаем самую длинную строку = 1 строке
        for (int i = 0; i < list1.size(); i++) 
        {
            String a = list1.get(i);
            if (max.length() < a.length())  // если появляется новая самая длинная строка
            {
                for (int j = 0; j < i; j++)
                {
                    list2.remove(j); // удаляем предыдущие значения строк
                }
                max = a;/*
                list2.set(n,a);*/
                list2.add(0, a); // добавляем в начало.
                n=1; // количество строк которое будем выводить
            }
            if (max.length() == a.length()) // если находим ещё одну строку с таким же количеством символов как у самой длинной
            {

                max = a;/*
                list2.set(n,a);*/
                list2.add(0, a);
                n = n + 1; // увеличиваем количество строк для вывода на 1.
            }

        }

        for (int i = 0; i < n; i++) // вывод
        {
            System.out.println(list2.get(i));
        }
    }
}

Последний раз редактировалось nevender; 21.02.2016 в 08:27.
nevender вне форума Ответить с цитированием
Старый 21.02.2016, 08:39   #12
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Вот например есть неплохая ссылка по ArrayList
http://developer.alexanderklimov.ru/.../arraylist.php
А по поводу того, что мой код не проходит проверку... Даже не знаю. Как вариант не реализован ввод слов с клавиатуры для заполнения списка.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 21.02.2016, 09:56   #13
nevender
Пользователь
 
Регистрация: 03.01.2016
Сообщений: 59
По умолчанию

Благодарю.)
nevender вне форума Ответить с цитированием
Старый 21.02.2016, 10:28   #14
nevender
Пользователь
 
Регистрация: 03.01.2016
Сообщений: 59
По умолчанию

Короче задача решена.
решил так: в цикле нашел длину максимальной строки, сохранил эту длину в переменную. В другом цикле находил строки с такой длиной и выводил на экран.
nevender вне форума Ответить с цитированием
Старый 10.09.2016, 02:01   #15
ArtJava
 
Регистрация: 04.07.2016
Сообщений: 3
По умолчанию

Вот моё решение:

1.создал Эррэй-лист;
2.ввёл 5 строк через цикл for;
3.создал внешний цикл for, в котором поочерёдно выбираются строки, а также создаётся "рейтинг" строки;
4.создал внутренний цикл for, в котором поочерёдно сравнивается, выбранная во внешнем цикле строка, со всеми и в случае > или = : повышается рейтинг на 1;
5.в итоге: рейтинг "yes" 5 определяет - нет ли строк больше выбраной
6.если так: строка проходит проверку if во внутри внешнего цикла for и сразу выводится на экран.
Комментарий: рейтинг "yes" по сути проверяет, что нет строк длиннее, чем выбранная во внешнем цикле.

JavaRush выдал: "решение лучше на 99% остальных" на 10.09.2016., разбирайтесь в коде и пользуйте.

Код:
public class Solution
{
    public static void main(String[] args) throws Exception
    {
      ArrayList<String> list = new ArrayList<String>();

      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
      for(int i=0; i<5; i++) list.add(i,reader.readLine());

      for (int a=0; a<list.size(); a++){
          int yes=0;
          for (int b=0; b<list.size(); b++) if (list.get(a).length()>=list.get(b).length()) yes++;
          if (yes==5) System.out.println(list.get(a));
      }
    }
}

Последний раз редактировалось ArtJava; 10.09.2016 в 02:11.
ArtJava вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить длину самой длинной подстроки(СИ) morclab Помощь студентам 4 25.02.2015 15:00
Выровнять слова в строках по ширине самой длинной строки роло Помощь студентам 1 18.02.2013 20:53
Выровнять слова в строках по ширине самой длинной строки регинa Помощь студентам 2 08.01.2013 19:42
Нахождение самой длинной последовательности ARV.net C# (си шарп) 7 03.11.2012 13:06
Порядковый номер самой длинной строки в файле tshen Помощь студентам 5 10.06.2010 14:44