Вот кусок моерешения
int max = list.get(0).length();
        int min = list.get(0).length();
        int a = 0;
        int b = 0

for (int i = 0; i < list.size(); i++)
            if(list.get(i).length() > max){
                max = list.get(i).length();
                 a = i;
}
 for (int i = 0; i < list.size(); i ++)
            if (list.get(i).length() < min){
                min = list.get(i).length();
                b = list.indexOf(list.get(i));
        }
System.out.println(a < b ? list.get(a) : list.get(b));
если сделать так:
//   int max = list.get(0).length();
     //   int min = list.get(0).length();
        int a = 0;
        int b = 0;


        for (int i = 0; i < list.size(); i++)
            if(list.get(i).length() > list.get(0).length();){
             //   max = list.get(i).length();
                 a = i;
        }
       // System.out.println(a);



        for (int i = 0; i < list.size(); i ++)
            if (list.get(i).length() < list.get(0).length();){
               // min = list.get(i).length();
                b = list.indexOf(list.get(i));
        }
System.out.println(a < b ? list.get(a) : list.get(b));
То прорамма работает не правильно. Какая разница между if(list.get(i).length() > list.get(i).length();) и if(list.get(i).length() > max). первый вариант кода, алгоритм понятен, а второй вообще не пойму откуда вывод берется такой(Строка из середина, среднего размера)