2011-10-24 62 views
5

我在編程II類的某個問題上遇到了一些問題,並且遇到了一堵磚牆,想知道是否有人可以提供幫助?使用遞歸進行雙字符串比較

該問題要求用戶輸入一個字符串,該程序將輸入字符串反轉,然後將反轉與原始字符進行比較,這必須遞歸執行。

到目前爲止,我有:

public class question1 
{ 
public static void main(String args[]) 
{ 

String input = JOptionPane.showInputDialog(null, "Please enter a sentence to determine if it is a palindrome."); 
String backwardsinput = Reverse(input); 
System.out.println(backwardsinput); 
boolean Palindrome = PalindromeCheck(backwardsinput, input); 

    if (Palindrome == true) 

     { 
     JOptionPane.showMessageDialog(null,"That is a palindrome!"); 
     } 

    if (Palindrome == false) 

     { 
     JOptionPane.showMessageDialog(null,"That is not a palindrome"); 
     } 

} 

public static String Reverse (String input) 
{ 
    if (input.length() <= 1) 
    return input; 

    else 
    { 
     char x = input.charAt(input.length()-1);    
     return x+Reverse(input.substring(0,input.length()-1)); 
    } 

} 



public static boolean PalindromeCheck (String backwardsinput, String input) 
{ 

    if(input.length() == 0 || input.length() == 1) 
      return true; 

     if(backwardsinput.charAt(0) == input.charAt(input.length()-1)) 
      return PalindromeCheck(backwardsinput.substring(1, backwardsinput.length()-1), input.substring(1, input.length()-1)); 

     else 
     return false; 

     }  
} 

我的問題是,它告訴我一切都回文,我在這上下打量及以上,不能找出原因!

+0

也許他們應該先*教你如何格式化你的代碼,然後轉到其他主題。 – Bohemian

+0

如果你能指出我做錯了什麼,或者指出我在這方面的一些資源,我會很感激。我只想學習,做我能做的最好的工作。 – Eogcloud

+0

@Bohemian:不是我見過的最糟糕的格式 - 它只是需要一些工作的最高位!和Eogcloud,我喜歡你的代碼,儘管格式和錯誤! :-) – Andy

回答

6

你正在做兩次這樣的工作。

if(backwardsinput.charAt(0) == input.charAt(input.length()-1)) 
              ^^^^^^^^^^^^^^^^ 

應該

if (backwardsinput.charAt(0) == input.charAt(0)) 
              ^

你幾乎得到它:-)


此外,表達

if (cond) 
    return something; 
else 
    return false; 

的另一種方式是

return cond && something; 

因此您的最後一個行可以寫成

return backwardsinput.charAt(0) == input.charAt(0) && 
     palindromeCheck(backwardsinput.substring(1, backwardsinput.length() - 1), 
           input.substring(1, input.length() - 1)); 

相關提問/回答:

+0

最後一點是有幫助的,我不知道你可以像這樣構造返回語句,謝謝! – Eogcloud

+0

感謝aiobe,我並不知道這種返回的方式,但現在我想到了,它沒有任何意義,因爲它就像單行if else語句! – Andy

+0

哪個沒有意義?我的建議? – aioobe

2

你在倒車的字符串,然後查字符串匹配這反轉。即它測試字符串被正確反轉。

當你可以做的不是反轉字符串,然後只檢查一個字符串匹配自己(ratehr比其反向)向後。

+0

這將是理想的情況!不幸的是,對於我來說,這個問題明確指出我們必須將其逆轉並遞歸地比較原始數據和相反數字( – Eogcloud

+0

)。您可以保留它並比較第一個字符和第一個字符以比較字符串。 –

3
if(backwardsinput.charAt(0) == input.charAt(input.length()-1)) 

這是行不通的。你想要backwardsinput.charAt(0) == input.charAt(0)。因爲你扭轉了它。

當調試這樣的事情,我傾向於拉開我所有的複合語句,所以

if(backwardsinput.charAt(0) == input.charAt(input.length()-1)) 

將成爲

char bc = backwardinput.charAt(0); 
char ic = input.charAt(input.length()-1); 
System.println(bc); 
System.println(ic); 
if (bc == ic) { 

我們都做愚蠢的錯誤,當我們試圖把太多在一個表達式中,所以這些是開始尋找邏輯錯誤的好地方。

+0

邏輯分解是一個很棒的想法,偉大的發現錯誤的方法,謝謝! – Eogcloud

相關問題