Кажется, мой код пропускает оператор возврата

Я пишу логическую функцию проверки палиндрома на Java - я изучаю рекурсию. Когда слово разделяется на последнюю (внутреннюю) одну или две буквы, и программа должна проверить, совпадают ли эти две буквы, кажется, что это не работает - функция всегда возвращает false. Кажется странным, что когда программа возвращается, она просто продолжает работать - я знаю это, потому что она продолжает печатать мои контрольные точки (операторы печати). Функция печати выполняется, но следующий за ней оператор return игнорируется. И даже когда функция должна вернуть истину (= слово является палиндромом), в конце она все равно возвращает ложь.

Я уже пробовал комбинации операторов if, if-else, различных положений операторов return, функция isPalindrome правильно работает с основной функцией, и я пробовал много отладки с функциями печати.

Мой код:

public static boolean isPalindrome(String word) {
    int wlength = word.length();
    System.out.printf("wlength = %d%n", wlength);
    
    if (wlength == 1) {
        System.out.printf("wlength == 1!!!!%n");
        return true;

    } else if (wlength == 2) {
        System.out.printf("wlength == 2%n");
        String first = word.substring(0, 1);
        String last = word.substring(1, 2);
        if (first == last) {
            return true;
        } else {
            return false;
        }
    }

    String first = word.substring(0, 1);
    String last = word.substring(wlength-1, wlength);
    System.out.printf("first = %s, last = %s %n", first, last);
    if (first.compareTo(last) == 0) {
        System.out.printf("first == last%n");
        String inner= word.substring(1, wlength-1);
        System.out.printf("new Word = %s RECURSION%n", inner);
        isPalindrome(inner);
    } 
    System.out.println("END");
    return false;
    
}

Спасибо!

# recursion return
Источник
  • 0
    prva не определено.
  • 2
    Вы игнорируете возвращаемое значение внутреннего вызова. Все вызовы длиннее 2 идут на ваш последний println и возвращают false.
  • 0
    Можете ли вы предоставить пример входного слова, которое вызывает проблему, и опубликовать соответствующий вывод консоли, в противном случае кому-либо довольно сложно диагностировать, что происходит. Достаточно сказать, что он определенно не будет «игнорировать» оператор return!
  • 0
    В дополнение к уже упомянутым проблемам, вы сравниваете две строки с == а не с equals() или equalsIgnoreCase()
  • 1
    isPalindrome(inner); -> return isPalindrome(inner);
  • 1
    Также пробовали ли вы использовать отладчик для пошагового выполнения кода, это НАМНОГО эффективнее, чем операторы печати.
Codelisting
за 2 против
if (prva.compareTo(last) == 0) {
    System.out.printf("first == last%n");
    String inner= word.substring(1, wlength-1);
    System.out.printf("new Word = %s RECURSION%n", inner);
    isPalindrome(inner); // <--- here
} 

Вы не записали возвращаемое значение в последней строке, показанной выше.

Codelisting
Популярные категории
На заметку программисту