You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用checkPalindrome方法时main函数抛出异常,疑似return语句存在问题

问题排查与修复方案

嘿,我一眼就揪出导致异常的问题啦,咱们一步步拆解来解决:

直接触发异常的核心原因:数组索引越界

你代码里的letters[num-i]写法完全错误!因为数组的索引是从0开始到num-1(num是字符串长度,也就是数组的实际长度)。当i=0时,num-i等于num,这明显超出了数组的最大索引范围,程序必然会抛出ArrayIndexOutOfBoundsException。

其他可以优化的逻辑问题

除了索引错误,你的代码还有几个冗余/不合理的地方:

  • 没必要把奇偶长度的字符串分开处理,回文判断的逻辑对两种情况是通用的
  • 不需要遍历整个字符串,只需要比较前半部分和后半部分的对应字符就行,奇数长度时中间的那个字符不影响回文结果
  • plaindrome变量完全是多余的,只要循环中没找到不相等的字符,直接返回true就好

修复后的简洁代码

public static boolean checkPalindrome(String inputString) {
    String[] letters = inputString.split("");
    int num = inputString.length();
    
    // 只遍历到字符串的一半位置,减少循环次数
    for (int i = 0; i < num / 2; i++) {
        // 修正索引:最后一个字符的索引是 num-1,对应位置为 num-1-i
        if (!letters[i].equals(letters[num - 1 - i])) {
            return false;
        }
    }
    // 循环结束说明所有对应字符都相等,是回文
    return true;
}

额外高效优化建议

其实不用把字符串拆成数组,直接用charAt()方法更高效,能避免数组创建的额外开销:

public static boolean checkPalindrome(String inputString) {
    int num = inputString.length();
    for (int i = 0; i < num / 2; i++) {
        if (inputString.charAt(i) != inputString.charAt(num - 1 - i)) {
            return false;
        }
    }
    return true;
}

内容的提问来源于stack exchange,提问作者Bhmmam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:00