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

此外,它會更容易做'檢查(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"; 

    } 
}