任何人都可以帮我弄清楚我的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;
}
答案 0 :(得分:2)
在代码的这一部分
if(s.charAt(0) == s.charAt(s.length()-1))
s = s.substring(1, s.length()-1);
**isPalindrome(Integer.parseInt(s));**
当第一个和最后一个字符不相等时,您没有给出其他条件。 当它们不相等时你应该返回false。还有'返回' 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;
}
答案 1 :(得分:1)
你应该return isPalindrome(Integer.parseInt(s));
,而不仅仅是调用它。
如果你不这样做,当你从递归中回来时,无论返回的递归调用是什么,你都会退出最后if
的范围和return false
。
答案 2 :(得分:0)
您需要 s.Length()-2
,而不是s.Length()-1
此外,您可以将首次true
测试更改为<= 1
,并删除length == 2
的特殊情况。
答案 3 :(得分:0)
听起来像[homework]
您可以通过在调试器中单步执行代码来查看问题,但是您遇到的一个问题是isPalindrome返回的值将被忽略。
您遇到的另一个问题是,数字前半部分的0
会被忽略。这是因为您将字符串转换为int
并返回字符串,因此1020321
似乎是一个回文。
答案 4 :(得分: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));
}
}