Прикрепил код, которым решил задачу. Валидатор пропустил. Но у меня вопрос: как можно решить задачу, не задавая переменным min и max конкретных значений? (в моем случае задано 100 и 0 соотв-но). Пробовал в мин и макс присваивать длину первой строки из массива, но тогда программа перестает работать в случае если максимальная/минимальная строка вводится самой первой. Может нужно прописать какое то доп. условие в цикле? Но какое?
package com.javarush.task.task07.task0712;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Самые-самые
*/
public class Solution {
public static void main(String[] args) throws IOException {
//напишите тут ваш код
ArrayList<String> list = new ArrayList<String>();
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
for (int i=0; i<10; i++){
String str = s.readLine();
list.add(str);
}
int min = 100;//длина минимум
int max = 0;//длина максимум
String minimum="";//строка минимум
String maximum="";//строка максимум
int minNum=0;//порядковый номер минимум
int maxNum=0;//порядковый номер максимум
for (int i=0; i<list.size(); i++){ //выясняем минимум
if (min>list.get(i).length()){
min = list.get(i).length();
minimum = list.get(i);
minNum=i;
}
}
for (int j=0; j<list.size(); j++){ //выясняем maximum
if (max<list.get(j).length()){
max=list.get(j).length();
maximum = list.get(j);
maxNum = j;
}
}
if (minNum<maxNum)
System.out.println(minimum);
else
System.out.println(maximum);
}
}
Даниил
31 уровень
Подскажите пожалуйста более изящный способ решения.
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Чумаков
20 июля 2019, 17:55
Ну например мое решение было таким:
Сначала проинициализируем пару переменных для индексов самого короткого и самого длинного слова, в начале они будут нулевыми (int minIndex = 0, maxIndex = 0;)
Еще нам нужна пара int для самих длин слов - длинного и короткого (int minLength = strings.get(0).length(), maxLength = minLength;)
В логике программы в одном цикле проходим по массиву и находим индексы самого длинного и самого короткого слова.
После - сравниваем эти индексы и печатаем слово с меньшим индексом.
0
Даниил
21 июля 2019, 09:39
Если я правильно вас понял, вы описали тот же вариант который пробовал я, когда сразу присваивал переменным, обозначающим длину строки, первую строку из массива. Но в таком случае программа не выполняется, если самое длинное/короткое слово вводится первым.
0
Justinian Judge в Mega City One Master
21 июля 2019, 11:22
Здесь особо изящных способов искать смысла мало, полу-учебная задача.
То о чем говорит Павел это стандартный алгоритм, если ты начинаешь сравнивать какой-то массив по какому-то критерию, то можно взять первый элемент в качестве эталона, чтобы начинать с чего сравнивать.
В твоем случае, это не сработает, потому что у тебя присваиваются пустые строки String minimum к примеру. А нужно
тогда должно все заработать, иначе у тебя не обновится значение переменных minimum/maximum, которые обновляются исключительно если найден больше/меньше.
Прямо указывать 0 и 100 это не вариант конечно, даже странно что валидатор пропустил. +1