【问题标题】:String out of bound error with even numbered length strings偶数长度字符串的字符串越界错误
【发布时间】:2019-07-05 01:44:00
【问题描述】:

我已经编写了我的方法版本来测试一个单词是否是回文。它似乎适用于奇数长度的字符串,但在使用偶数长度进行测试时会发生 String Out of Bound Exception 错误。

任何帮助将不胜感激!

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;
        }

    }

【问题讨论】:

  • 我可能是个盲人,但是你在哪里检查s 是否不为空、start 不是负数以及end 是否大于s.length()
  • 如果出现以下情况,您会遇到问题:else if(length%2 == 0 && (start+1) != (end-1))else if(length%2 == 0 && start+1 == end-1)。将字符串 aa 作为输入,它是一个回文。 start 为零,end 为 1。当我们遇到这些情况之一时 start+1 = 1 和 end-1 = 0 并且您再次调用该方法并将获得索引超出范围异常。您不能增加/减少两个指数。尝试只增加/减少一个。
  • 感谢所有建议 - 我现在就试试!
  • 真的需要这样实现回文函数吗?如果可以,为什么不直接使用支票s.equals(new StringBuilder(s).reverse().toString())
  • 我需要在我的方法中加入递归!我知道它效率低下,但我想在我有一个工作代码之后我会担心这个。

标签: java string recursion indexoutofboundsexception palindrome


【解决方案1】:

我认为您的代码有点不必要的复杂,您正在使用索引来执行您可以在 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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多