调用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
相关产品推荐
相关产品推荐

