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)),否则最后一个返回将在函数执行后执行。

     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] 您可以通过在调试器中单步执行代码来查看问题,但是您遇到的一个问题是 isPalindrome 返回的值被忽略了。

您遇到的另一个问题是0前半部分的数字被忽略了。这是因为您将字符串转换为 anint并转换回字符串,因此1020321看起来像是回文。

BTW:这个问题已经被问过很多次了。您是否将您的答案与网络上的其他人进行了比较?

于 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 回答