2011-10-24 17 views
5

プログラミングIIクラスの質問に問題があり、レンガの壁にぶつかって、誰かが助けてくれるのだろうかと疑問に思っていましたか?再帰を使用した2つの文字列の比較

文字列を入力するか、入力文字列を逆順にして逆に元の文字列と比較するかを質問します。これは再帰的に行う必要があります。

これまでのところ、私が持っている:

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

@ボヘミアン:私が見た最悪のフォーマットではありません - それはいくつかの作業を必要とするトップビットです!そしてEogcloud、私はあなたのコードがフォーマットとエラーを嫌うのが好きです! :-) – Andy

答えて

6

あなたは仕事を2回(並べ替え)しています。

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

あなたはほとんど:-)


はまた、

if (cond) 
    return something; 
else 
    return false; 

を表現する別の方法が

でそれを得た

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

する必要があります

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ありがとう、私は戻ってその方法については知らなかったが、今私はそれについて考えて、それは単なる行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

関連する問題