我试图编写一个检查字符串变量是否为回文的函数。
我无法找到此代码抛出IndexOutOfBoundException
的原因。我试图使用示例来跟踪结果,但我仍然无法查看异常的来源。
public static boolean palindrome(String s) {
if (s.charAt(0) == s.charAt(s.length() - 1)) {
if (s.length() > 2) {
StdOut.print(s.substring(1, s.length() - 2));
palindrome(s.substring(1, s.length() - 2));
} else
return true;
}
return false;
}
答案 0 :(得分:4)
palindrome
最终可以使用空字符串调用自身。当发生这种情况时,第一行会在IndexOutOfBoundsException
中提供s.charAt(0)
。
P.S。仔细观察,substring
调用中的边界也是不正确的:因为结束索引是独占,所以第二个参数应该是s.length() - 1
。你也需要解决这个问题。
答案 1 :(得分:2)
试试这个:
public static boolean palindrome(String s)
{
if (s.length() < 2)
return true;
if (s.charAt(0) != s.charAt(s.length()-1))
return false;
return palindrome(s.substring(1,s.length()-1));
}
答案 2 :(得分:1)
您的子字符串错误。你要从最后删除一个额外的角色。
public static boolean palindrome(String s) {
if (s.charAt(0) == s.charAt(s.length() - 1)) {
if (s.length() > 2) {
StdOut.print(s.substring(1, s.length() - 1));
palindrome(s.substring(1, s.length() - 1));
} else
return true;
}
return false;
}
答案 3 :(得分:1)
这里有几个问题:
substring
来电错误 - endIndex
是独占的,因此您应该以{{1}} s.length() - 1)
,然后继续使用该功能,最终返回palindrome
- 相反,您应该返回应用false
的结果子字符串:因此,在考虑到这两个错误后,方法应如下所示:
palindrome