Не выполняются условия 3 и 4. Хотя выводит правильный ответ. В конце приписал еще 1 решение, результат тот же. Я что то упускаю? И не совсем понятно описание пунктов 3 и 4. В задаче написано - Узнай, какая строка в списке встретится раньше: самая короткая или самая длинная. а в пунктах 3 и 4 - Программа должна выводить на экран самую короткую строку, если она была раньше самой длинной. Программа должна выводить на экран самую длинную строку, если она была раньше самой короткой. но о смене переменных и речи нет, что значит была раньше самой длинной? public class Solution { public static void main(String[] args) throws Exception { //написать список строк // найти минимальное и максимальные числа строк // вывести на экран первое из них через else else if ArrayList <String> name = new ArrayList <String>(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 10; i++) { name.add (reader.readLine());//напишите тут ваш код } int min = name.get(0).length(); int max = name.get(0).length(); int x1 = 0; int x2= 0; for (int z = 0; z<10; z++) { if (name.get(z).length()>z) { max = name.get(z).length(); x1 = z; } } for (int c = 0; c <10; c++) { if (name.get(c).length()<c) { min = name.get(c).length(); x2 = c; } } if ( x1 < x2) //осталось вывести на экран первое из совпадений. { System.out.println(name.get(x1)); } if (x2<x1) { System.out.println(name.get(x2)); } } } второе решение пункта 3 и 4. результат тот же. int n = 0; while (n < 10) { n++; if(n==x1) { System.out.println(name.get(n)); break; } if (n==x2) { System.out.println(name.get(n)); break; } }