偶数长度字符串的字符串越界错误

String out of bound error with even numbered length strings

我已经编写了测试一个单词是否为回文的方法版本。它似乎适用于奇数长度的字符串,但在使用偶数长度进行测试时会出现字符串超出范围异常错误。

如有任何帮助,我们将不胜感激!

public static boolean palindrome(String s, int start, int end) {

int length = s.length();


        if (length%2 != 0 && start != end) {
            if (s.charAt(start) == s.charAt(end)) {
                return palindrome(s,start+1,end-1);
            }
            else {
                return false;
            }
        }
        else if(length%2 == 0 && (start+1) != (end-1)) {
            if (s.charAt(start) == s.charAt(end)) {
                return palindrome(s,start+1,end-1);
            }
            else {
                return false;
            }
        }
        else if(length%2 != 0 && start == end) {
            return true;
        }
        else if(length%2 == 0 && start+1 == end-1) {
            if (s.charAt(start+1) == s.charAt(end-1)) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }

    }

我认为你的代码有点不必要的复杂,你正在使用索引来做你可以用 java 中的子字符串做的事情。此外,您可以通过在基本情况下考虑偶数或奇数来避免许多情况。我试图保留您的方法并尽可能减少代码。我觉得干净多了。在基本情况下,如果数字是奇数,它将以 1 结束,如果是偶数,它将以 2 结束。

public boolean isPalindrome(String string)
{
    if (string.length() > 2) {
        if (string.charAt(0) == string.charAt(string.length() - 1)) {
            return this.isPalindrome(string.substring(1, string.length() - 1));
        } else {
            return false;
        }
    } else if (string.length() == 1) {
        return true;
    } else {
        if (string.charAt(0) == string.charAt(1)) {
            return true;
        } else {
            return false;
        }
    }
}