1

私が書いている基本的なプログラムについて、レースカーなどの単語が回文であるかどうかについて質問がありました。

文字列を逆にして句読点を削除する私のすべての方法は機能しますが、それが回文であるかどうかを判断する方法はそうではありません。

/**
* Determines if a series of letters makes a palinedrome
* 
* @param  str   All punctuation and spaces have been removed 
*               before this method is called.  
* @return true  if phrase is a palindrome,
*         false otherwise.
*/
public boolean isPalindrome(String str)
{
   String d = reverseString (str); 
   return( str.equals (reverseString (str) ) ); 

}
4

5 に答える 5

6

さて、関数は使用されていないため、どのような目的dで機能するのかわかりませんが、関数が機能しない理由を確認したい場合は、デバッグ コードを追加してください。

public boolean isPalindrome (String str) {
    System.out.println ("DEBUG: original string = '" + str + "'");
    System.out.println ("DEBUG: reverse string = '" + reverseString (str) + "'");
    if (str.equals (reverseString (str)))
        System.out.println ("DEBUG: returning true");
    else
        System.out.println ("DEBUG: returning false");
    return str.equals (reverseString (str));
}

あなたのreverseString機能に何か問題があることにお金を賭けます(しかし、あまりお金はありません)。これらのデバッグ ステートメントは、問題がどこにあるかを把握するのに十分な情報を提供するはずです。

于 2009-10-30T01:20:46.377 に答える
5

、およびすべての空白が削除された場合string reverseString(String string)、何かが回文であるかどうかを確認する必要があります

public boolean isPalindrome(String string)
{
    return string.equals(reverseString(string));
}

これは大文字と小文字が区別されるため、回文定義で大文字と小文字を区別しない場合は、代わりに equalsIgnoreCase を使用してください。

これが機能しない場合は、stripping メソッドと reverseString メソッドをもう一度確認してください。

于 2009-10-30T01:11:28.767 に答える
0

すでに宿題を提出していると思いますが、私は Java を学んでいて練習が必要だったので、ここに私のコードを示します。char 配列を使用し、それを逆にします。最善の方法は StringBuilder を使用することだと思いますが、宿題の目的はおそらく自分でそれを行うことを学ぶことです:

public class reverseString {
    public static void main(String[] args) {
        System.out.println("racecar is a palindrome: "+ isPalindrome("racecar"));
    }

    public static boolean isPalindrome(String str)
    {
       String d = reverseString (str); 
       return( str.equals (reverseString (str) ) ); 
    }

    private static char[] reverse(char[] input) {
        int length = input.length;
        char[] reversed = new char[length];
        for (int i=0;i<length;i++) {
            reversed[length-i-1]=input[i];
        }
        return reversed;
    }

    private static String reverseString(String input){
        String reversed = new String(reverse(input.toCharArray())); 
        return reversed;
    }   
}

出力:

racecar is a palindrome: true

私のコードがうまくいかない理由について誰かがコメントを持っている場合は、すぐに立ち去ってください。建設的な批判をいただければ幸いです。

于 2013-04-05T01:34:16.863 に答える
0

コードは次のようになります。

String d = reverseString (str); 
return( str.equals (d) ); 

reverseString() を 2 回呼び出す必要はありません

PS: StringBuffer には String を逆にするメソッドがあります。

于 2009-10-31T20:53:48.173 に答える
0

あなたの問題は、あなたが示していない逆文字列メソッドです。そのメソッドが適切に機能している場合は、 isPalindrome メソッドが機能するはずです。あなたがする必要があるのは、逆文字列メソッドを修正することだけです.

Java にはネイティブの文字列逆引きメソッドがありません。独自に作成することを強くお勧めします。

ただし、Java にはStringBufferStringBuilderの逆メソッドがあります。StringBuilder は StringBuffer よりも優先されます。

equals メソッドを使用して、反転した文字列を元の文字列と比較します

于 2009-10-30T05:31:45.153 に答える