2016-05-01 4 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

おそらく、 'check(sb.toString());'行を変更する必要があります。 'result = check(sb.toString());'になるようにします。 – DB5

+1

また、StringBuilder全体の代わりに 'check(str.substring(1、str.length() - 1));'を実行する方が簡単です。 –

答えて

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"; 

    } 
} 
関連する問題