Функция посимвольного сравнения строк с учетом регистра

Напишите функцию, которая принимает две строки a и b. Возвращает -1, если a < b. 0, если a == b. 1, если a > b Строка может содержать символы с кодами с 32 по 126. Максимальная длина строки 10^6 символов.

Одна строка меньше другой, если код первого символа первой строки меньше кода первого символа второй строки. Если коды одинаковые, то необходимо смотреть на вторые символы, и т.д.

Решаю эту задачу, но в моем решении что-то не верно, так как возвращает не то число, которому должен быть равен ответ при заданном условии. Может быть кто-нибудь подскажет где именно я не правильно написала код.

Вот мой код:

public static int compare(String a, String b){
        char [] arrayA = a.toCharArray();
        char [] arrayB = b.toCharArray();
        int number = 0;
        for (int i = 0; i < arrayA.length; i++){
            for (int j = 0; j < arrayB.length; j++){
                if (arrayA[i] < arrayB[j]  ){
                    number = -1;
                }
                if (arrayA[i] > arrayB[j]){
                    number = 1;
                }
                if(arrayA[i] == arrayB[j]){
                    number = number;
                }
            }
        }
        return number;
    }

Ответы (1 шт):

Автор решения: 4500zenja

Вы зачем-то после проверки первых символов проверяете первый символ первой строки со вторым элементом, потом с третьим и т.д. Это так не работает, о чём пишет формулировка из условия задачи:

Одна строка меньше другой, если код первого символа первой строки меньше кода первого символа второй строки. Если коды одинаковые, то необходимо смотреть на вторые символы, и т.д.

Достаточно лишь пройтись одним for'ом, который будет идти до конца наименьшей строки, и сравнивать соответствующие элементы двух массивов. Если цикл закончится, а результат не будет найден, то проверяем между собой длины массивов; если они равны, то и сами строки тоже равны.

public static int compare(String a, String b){
    char [] arrayA = a.toCharArray();
    char [] arrayB = b.toCharArray();
    int number = 0;
    int n = Math.min(arrayA.length, arrayB.length); /* минимальный размер из двух строк,
                                                     * чтобы обошлось без переполнения 
                                                     */
    for (int i = 0; i < n; i++){
        if (arrayA[i] < arrayB[i]) {
            return -1;
        }
        if (arrayA[i] > arrayB[i]) {
            return 1;
        }
    }
    if (arrayA.length > arrayB.length) return 1;
    else if (arrayA.length < arrayB.length) return -1;
    else return 0;
}
→ Ссылка