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 Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> str = new ArrayList<>();
for (int i = 0; i < 10; i++) {
str.add(r.readLine());
}
int min = str.get(0).length();
int max = str.get(0).length();
int indMin = 0;
int indMax = 0;
String a = null, b = null;
for (int i = 0; i < str.size(); i++) {
if (str.get(i).length() < min) {
min = str.get(i).length();
}
}
for(int i=0; i < str.size(); i++){
if (str.get(i).length() > max) {
max = str.get(i).length();
}
}
for(int i = 0; i < str.size(); i++){
if (str.get(i).length() == min) {
indMin = i;
a = str.get(i);
}
}
for(int i = 0; i < str.size(); i++){
if (str.get(i).length() == max) {
indMax = i;
b = str.get(i);
}
}
if(indMin < indMax) {
System.out.println(a);
}
else {
System.out.println(b);
}
}
//напишите тут ваш код
}
Salavat
17 уровень
Не проходит валидацию, при этом работает как надо
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
NodeOneExpert
23 мая 2018, 19:53
Вы в цикле где находите самую короткую строку сразу строку запоминайте. т.е.
так же и с indMax
0
Maxim
23 мая 2018, 19:31
0. "как надо" код не точно не работает.
1.сократи массив с 10 до 3 и введи 1 2 3. потом 3 2 1, потом 2 3 1.
посмотри результат.
по итогу: вывод максимального и минимального значения не корректный во всех случаях.
2. решение можно сделать одним циклом for. у тебя их 5.
3. в 4 и 5 цикле у тебя идёт сравнение длин строк, но в выборку попадают Все похожие строки с их индексами, как следствие получается Перезапись indMax новым полученным индексом.
4. совет: нужен счетчик, тк нужное событие произойдет всего лишь Один раз. и будет или 0 или 1.
0
Andro812
10 мая 2018, 21:45
Если обнаруживаем, что str.get(i).length() == min или str.get(i).length() == max надо ли дальше бежать по списку и запоминать индексы и т.д.?
0
Salavat
5 мая 2018, 20:21
Ольга, спасибо за подсказку! Ярослав прав, проблема пока не решена. indMin индекс присваивается корректно, а индекс min - последняя строка.
0
Ольга
5 мая 2018, 13:50
Достаточно запоминать индексы максимальной и минимальной строк сразу при поиске.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Самые-самые
*/
public class noname {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> str = new ArrayList<>();
for (int i = 0; i < 10; i++) {
str.add(r.readLine());
}
int min = str.get(0).length();
int max = str.get(0).length();
int indMin = 0;
int indMax = 0;
for (int i = 0; i < str.size(); i++) {
if (str.get(i).length() < min) {
min = str.get(i).length();
indMin = i;
}
}
for(int i=0; i < str.size(); i++){
if (str.get(i).length() > max) {
max = str.get(i).length();
indMax = i;
}
}
if(indMin < indMax) {
System.out.println(str.get(indMin));
}
else {
System.out.println(str.get(indMax));
}
}
0
Ярослав Java Developer Master
5 мая 2018, 14:49
Проблема так и не решена. И можно сразу искать минимум и максимум.
0
Ярослав Java Developer Master
4 мая 2018, 20:45
Если таких строк несколько, то должны быть учтены самые первые из них.
У вас всегда сохраняется последний индекс минимальной строчки и максимальном. Таким образом, если будет последовательность:
ааа
аааа
аааа
ааа
То у вас будет выводиться строчка аааа, хотя должна была бы ааа, так как она встретилась раньше.
+2