2016-05-01 3 views
2
public static String check(String str) 
{ 
    String result = ""; 

    // Strips the string down to only letters a-z and numbers 0-9, and makes it lowercase 
    str = str.replaceAll("[^A-Za-z0-9]", ""); 
    str = str.replaceAll("\\s+",""); 
    str = str.toLowerCase(); 

    if (str.length() < 1) 
    { 
     result = "The string is a palindrome"; 
    } 
    else if ((str.charAt(str.length() - 1)) == (str.charAt(0))) 
    { 
     StringBuilder sb = new StringBuilder(str); 
     sb.deleteCharAt(0); 
     sb.deleteCharAt(sb.length()-1); 
     check(sb.toString()); 
    } 
    else 
    { 
     result = "The string is not a palindrome"; 
    } 
    return result; 
} 

Я попытался передать несколько строк в этот метод, включая палиндромы. По какой-то причине он продолжает возвращать значение по умолчанию «». Почему метод не возвращает информацию о том, является ли строка палиндром?Функция рекурсивного палиндрома сохраняет возвращаемое значение результата по умолчанию?

+3

Возможно, вам необходимо изменить проверку линии (sb.toString()); to be result = check (sb.toString()); – DB5

+1

Также было бы проще просто выполнить проверку (str.substring (1, str.length() - 1)); вместо всего объекта StringBuilder. –

ответ

3

Вы должны добавить возврат перед рекурсивным вызовом. Попробуйте так:

public static String check(String str) 
{ 


    // Strips the string down to only letters a-z and numbers 0-9, and makes it lowercase 
    str = str.replaceAll("[^A-Za-z0-9]", ""); 
    str = str.replaceAll("\\s+",""); 
    str = str.toLowerCase(); 

    if (str.length() <= 1) 
    { 
     return ("The string is a palindrome"); 


    } 
    else if ((str.charAt(str.length() - 1)) == (str.charAt(0))) 
    { 
     StringBuilder sb = new StringBuilder(str); 
     sb.deleteCharAt(0); 
     sb.deleteCharAt(sb.length()-1); 
     return check(sb.toString()); 
    } 
    else 
    { 
     return "The string is not a palindrome"; 

    } 
} 
Смежные вопросы