0

私の isPalindrome(int) 関数の何が問題なのかを誰かが教えてくれますか?

基本的に、この関数は数値が回文であるかどうかをチェックします。これを再帰によって実現したかったのです。関数内で isPalindrome(int) を呼び出すと、問題が発生します。これは私の多くの頭痛をもたらしました。ありがとう!

public boolean isPalindrome(int num) {
    String s = Integer.toString(num);
    if( s.length() == 1 ) {
    return true;
}
if( s.length() == 2 && s.charAt(0) == s.charAt(1) ) {
    return true;
}
if( s.length() > 2 ) {
    if(s.charAt(0) == s.charAt(s.length()-1))
        s = s.substring(1, s.length()-1);
        **isPalindrome(Integer.parseInt(s));**
}
return false;
}
4

5 に答える 5

2

コードのこの部分で

       if(s.charAt(0) == s.charAt(s.length()-1))
         s = s.substring(1, s.length()-1);
        **isPalindrome(Integer.parseInt(s));**

最初と最後の文字が等しくない場合の条件に、else を指定していません。等しくない場合は false を返す必要があります。また、「return」は isPalindrome(Integer.parseInt(s)) です。それ以外の場合は、関数の実行後に最後の return が実行されます。

     if(s.charAt(0) == s.charAt(s.length()-1)) {
         s = s.substring(1, s.length()-2);
         return isPalindrome(Integer.parseInt(s));
     } else {
       false;
     }
于 2012-01-17T17:01:53.977 に答える
1

return isPalindrome(Integer.parseInt(s));呼び出すだけではありません。

そうしないと、再帰から戻ったときに、再帰呼び出しが何を返しても、最後ifの のスコープを終了します。return false

于 2012-01-17T16:57:42.497 に答える
0

あなたがしたいs.Length()-2、ではありませんs.Length()-1

また、最初のtrueテストを<= 1に変更して、 の特殊なケースを削除することもできますlength == 2

于 2012-01-17T16:58:17.723 に答える
0

デバッガーでコードをステップ実行することで問題を確認できるよう[homework] に思えますが、問題の 1 つは isPalindrome によって返される値が無視されることです。

もう 1 つの問題0は、数字の前半が無視されることです。これは、文字列を に変換して文字列にint戻すため1020321、回文のように見えるためです。

ところで:この質問は以前に何度も尋ねられました。自分の答えをウェブ上の他の人と比較しましたか?

于 2012-01-17T16:58:33.213 に答える
0
public class Recursion {
    public static String Palindrome(int length)
        {
        //Alphabet to pick letters from
        String alpha="abcdefghijklmnopqrstuvwxyz";
        String s="";
        String sBackwards=" ";
        if(length==0) {
            sBackwards+=reverse(s);
            return sBackwards;
            //recursion over-rides sBackwards
        } else {
            Random r = new Random();
            //places a char from alpha into s
            s+=(alpha.charAt((int)r.nextInt(26)));
            System.out.print(s);
            return Palindrome(length-1); //recursion
        }
    }
    public static void main(String args[])
    {
        System.out.println(Palindrome(10));
    }
}
于 2012-01-17T16:59:33.417 に答える