Самые-самые

  • 10
  • Недоступна
Игры со списками в Java очень популярны. А всё потому, что это просто и интересно. Присоединяйтесь! В этой задачке создаем список строк. Затем — добавляем в него 10 строчек с клавиатуры. Самое интересное — определяем, какая строка в списке встретится раньше: самая короткая или самая длинная. Если таких строк несколько, учитываем самые первые из них.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (388)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Richard Zorge7 уровень, Улан-Удэ
позавчера, 14:52
получил зеленые галочки, я счастлив. Написал код, прочитал обсуждения, потом условие раз 5 и понял задачу.
Yakov Bashkurov7 уровень, Тобольск
28 June, 09:00
напишу и я как решил, может кому будет интересно: cоздал 4 переменные6
int min = list.get(0).length();
int minS = 0;
int max = list.get(0).length();
int maxS = 0
в цикле сравнил каждый элемент строчного массива, чтобы найти самый длинный и самый короткий. в minS и maxS записывал индекс самой бОльшей и самой меньшей строки. какой индекс меньше, тот и раньше встречается в списке, его и вывел на экран.
Pavel Milanov8 уровень, Москва
21 June, 12:04
Несколько раз не пропускал валидатор из-за того, что были в коде написаны пометки мной. Будьте внимательны.
Максим Дудин8 уровень, Калининград
23 June, 20:00
точно такая же фигня..
Pavel Dyakov12 уровень, Санкт-Петербург
11 June, 10:18
Находим самую длинную строку и самую короткую. Я сделал с помощью циклов, но вариант с Collections.max и min сделал код короче примерно на 8 строк. Спасибо Ayrat за интересную подсказку. Проверяем все элементы на длину, если длина элемента равна минимуму, заносим элемент в новый массив,если длина элемента самая длинная, то тоже заносим элемент в этот массив. на печать отправляем элемент нового массива с индексом 0 (так как этот элемент был самый первый, который мы нашли в нашем начальном листе и добавили в новый лист).
oretinio7 уровень, Москва
22 June, 18:55
Подсказал идею по поводу нового массива с индексом 0. Сразу же решил.
Ayrat11 уровень, немосква
7 June, 12:40
А мы лёгких путей не ищем. Мы создаём, окромя основного строкового массива, ещё второй, из длин его строк. И уже в нем ищем путём Collections.max(второй массив) максимальное значение (аналогично минимальное). Потом выискиваем через цикл их индексы (через булевое равно ==), сравниваем их между собой и выдаём то значение, чей индекс меньше. Никаких КИСС-принципов, только индийские коды, только обходные пути.
Владимир7 уровень, Краснодар
1 June, 21:34
Решал эту задачу последней, получается с первого раза за 5-7 минут. 1. Инициализируем список ArrayList<String> str = new ArrayList<>(); 2. Находим самую длинную строку. Запоминаем индекс этой ячейки в промежуточную переменную indexMax 3. Находим самую короткую строку. Запоминаем индекс этой ячейки в промежуточную переменную indexMIn 4. Сравниваем эти переменные, и на основе сравнения выводим str.get(indexMax) или str.get(indexMin)
Mike19 уровень, Москва
8 June, 20:00
Можно п1 и п2 делать одновременно при том при считывании данных, 1 массив вместо 3
Владимир7 уровень, Краснодар
9 June, 06:46
Mike, не совссем понял твой комментарий. Массив всего один str, я добавил 2 переменные типа int - в них хранятся именно индексы ячеек, а не их значения.
Mike19 уровень, Москва
13 June, 08:52
Изначально. судя по описанию, понял, что было 2 цикла по массиву, для поиска самой длинной и самой короткой строки. Поэтому прокомментировал, что можно делать в одном массиве.
Kozzy Rock8 уровень, Санкт-Петербург
позавчера, 20:22
Не удивительно. Эта задача просто совмещает решения про самую короткую и самую длинную строку. Поэтому, если решил эти, то последняя решается практически копипастом.
Алексей12 уровень, Санкт-Петербург
31 May, 09:14
Решил поделится соображениями насчет этой задачи. 1. Bufferreader. 2. ArrayList 3. int max и min 4. Заполняем массив (ArrayList с помощью Bufferreader). 5. Определяем max и min, примерно так if (strings.get(i).length()>max){ max = strings.get(i).length(); } 6. Вводим переменную int answer 7. Запускаем цикл. с первым if if (strings.get(i).length() == max){ answer = max; break; (если он выполнен, цикл завершится } 8. Следующие условие в этом же цикле как else if для определения минимума, а потом break. Как только пункт 7 или 8 разорвет цикл, мы получим в answer в котором будет длина строки, либо самая длинная, либо самая короткая. 9. И последним циклом мы выводим строки длиной = answer. Из-за этого кстати была ошибка 3-жды. Так как нужно вывести только одну строку с помощью print(ln-не надо). Вот примерно как-то так...
AndyS15 уровень, Москва
4 June, 01:38
Можно все сделать гораздо проще, если переменным min и max присваивать не длину строк, а индексы в массиве: minIndex для индекса с минимальной строкой и maxIndex для индекса с максимальной строкой. А затем останется лишь вывести на экран элемент массива с индексом = Math.min(minIndex, maxIndex).
nikolay8 уровень
27 May, 06:36
Есть метод list.sort((first,second) -> Integer.compare(first.length(),second.length())); сортирует ArrayList по размеру( длине ) компонентов string , работает в последних версиях java. Collections.sort(array); -используется для "простых" массивов. "Испытал оба метода в разных вариантах решения задачи. При решении можно создавать для "удобства" более одного массива.
nikolay8 уровень
27 May, 06:48
Collections.sort использовал для ArrayList<Integer>
Ivan18 уровень, Череповец
25 May, 19:43
Два for. Первый с двумя if, второй с if + else if (хотя можно просто if). Споткнулся на списке из пяти строк (для удобства проверки, чтобы каждый раз весь десяток не забивать). Да так обрадовался быстрому решению, скорее запустил валидатор, был уверен на 99% в успехе. Эх, бессердечный валидатор.
Mihail Klimenko9 уровень, Краснодар
19 May, 18:57
Споткнулся на выводе самой маленькой строки, если она будет первее самой длинной. Переделал код, сделал три цикла, в первом цикле собираем массив, после него объявляем переменные min, max и инициализируем их длинной нулевой ячейки массива. Дальше цикл, в котором находим самую маленькую и самую большую строки. И третий цикл - перебираем массив, ловим длинную\короткую строку и выводим ее на экран
Ivan18 уровень, Череповец
25 May, 19:49
Первые два цикла собрал в один, в нём и определил при заполнении min, max. Второй цикл перебирал через if (breack), else if (breack) - хотя можно без else.
AndyS15 уровень, Москва
4 June, 01:40
Достаточно одного цикла: получаем новую строку с клавиатуры и сразу проверяем, не является ли она самой длинной из ранее введенных или самой короткой, если да, то запоминаем ее индекс либо как максимальный, либо как минимальный. Потом остается лишь вывести на экран элемент с одним из этих двух индексов.
Алина9 уровень, Москва
17 June, 19:19
решила двумя циклами и тоже пришлось воспользоваться Integer.MAX_VALUE. Но это, мягко сказать, не оптимальный путь. Поэтому хотелось бы уточнить: Вы переменные для максимального и минимального индекса объявляете внутри цикла или до него? Если до него, то присвоить им первое значение массива до его заполнения в цикле не получается - компилятор ругается. А если объявлять внутри цикла, то как потом выводить строку по индексу... Или Вы смогли и вывод нужной строки в одном цикле реализовать?
phil12 уровень, Казань
Tuesday, 13:10
System.out.println(s.get(min<max?min:max));