Подскажите в чём проблема, тестировал по разному - уже toLowerCase поставил..
package com.javarush.task.task08.task0830;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
Задача по алгоритмам
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] array = new String[20];
for (int i = 0; i < array.length; i++) {
array[i] = reader.readLine();
}
sort(array);
for (String x : array)
{
System.out.println(x);
}
}
public static void sort(String[] array) {
int i = 0;
int j = 0;
for(i = 0; i < array.length-1; i++) {
for (j = 0; j < array.length - 1; j++) {
int c = 0;
int x = 1;
int length;
if(array[j].length()<array[j+1].length()){
length = array[j].length();
}
else length = array[j+1].length();//выясняем меньшую длину из 2х слов
if (isGreaterThan(array[j].substring(c, x).toLowerCase(), (array[j + 1].substring(c, x).toLowerCase()))) {//если 1е буквы не по алфавиту - меняем
String temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
else if(array[j].substring(c,x).toLowerCase().equals(array[j+1].substring(c,x).toLowerCase())) {//если же 1е буквы равны
for(int t = 0; t < length; t++){//запускаем цикл равный длине наименьшего из 2х слов
if(x+1 < length) {
c++;
x++;
if (!array[j].substring(c, x).toLowerCase().equals(array[j + 1].substring(c, x).toLowerCase())) {
if ((isGreaterThan(array[j].substring(c , x ).toLowerCase(), array[j + 1].substring(c , x ).toLowerCase()))) {//проверяем следующие буквы +1
String temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
break;
}
}
}
}
}
}
}
//Метод для сравнения строк: 'а' больше чем 'b'
public static boolean isGreaterThan(String a, String b) {
return a.compareTo(b) > 0;
}
}