【问题标题】:Why do I get a StringOutOfBoundsException even though I am within bounds of the String array?为什么即使我在字符串数组的范围内,我也会收到 StringOutOfBoundsException?
【发布时间】:2020-08-16 09:16:05
【问题描述】:

我目前正在尝试这个问题,并且似乎不断收到这个StringOutOfBoundsException,有人可以向我解释为什么吗? 当我退出 while 循环时,似乎我输入错误 endPtr--;

class Solution {
    public boolean isPalindrome(String s) {
        if (s == null) {
            throw new IllegalArgumentException("Illegal input!");
        }
        if (s.length() <= 1) {
            return true;
        }
        
        int startPtr = 0;
        int endPtr = s.length() - 1;
        
        while (startPtr < endPtr) {
            while (startPtr < endPtr && !Character.isLetterOrDigit(s.charAt(startPtr))) {
                startPtr++;
            }
            
            //ERROR while (startPtr < endPtr && !Character.isLetterOrDigit(s.charAt(endPtr)))  {
                //endPtr--;
            //}
            
            if (startPtr < endPtr && Character.toLowerCase(s.charAt(startPtr)) != Character.toLowerCase(s.charAt(endPtr))) {
                return false;
            }
        
            startPtr++;
            endPtr++;
        }
        return true;
    }
}

【问题讨论】:

  • 如果您包含代码,请将其粘贴为文本。
  • 我可以建议您在while循环中放置一个System.out.println()语句来查找endPtr的值吗?或者使用调试器。
  • 因为 endPtr 要么低于 0,要么在字符串的长度或更高。一些简单的调试会告诉你哪个。

标签: java palindrome


【解决方案1】:

在主循环结束时,您正在递增 endPtr。

    startPtr++;
    endPtr++;

通过这样做,您将字符串的结尾定位在其真正结尾之后。

错误来了。

而且,您正在创建一个无限循环,因为条件

while (startPtr < endPtr)

永远都是真的。

【讨论】:

  • 我要补充一点,您应该使用不同的变量来浏览您的 String :两个用于主循环,不同的用于辅助循环。否则,你的程序会混乱。
猜你喜欢
  • 2019-11-22
  • 1970-01-01
  • 2022-06-30
  • 2021-08-21
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多