Java数组移位代码报ArrayOutOfBounds异常无法解决,求错误排查
代码问题分析
- 直接触发数组越界异常的问题:Java数组的索引范围为
0~A.length - 1,代码中A[A.length]访问了超出数组最大合法索引的位置,这是抛出ArrayOutOfBoundsException的直接原因。 - 外层循环次数错误:若要执行K次移位,循环条件
a <= K会实际执行K+1次移位,多执行了一次冗余操作。 - 移位遍历方向错误:当前内层循环从数组头部开始执行
A[j + 1] = A[j],会导致前一个元素的值提前覆盖后一个元素的原值,遍历结束后所有元素都会被覆盖为初始A[0]的值,完全不符合移位需求。正确的遍历顺序应从数组倒数第二个元素开始从后往前遍历,避免原值被提前覆盖。 - 首元素赋值时机错误:你将首元素赋值操作写在了内层循环中,每次内层循环迭代都会修改首元素的值,且没有提前保存移位前的末元素原值,最终赋值给首元素的是被覆盖后的错误值。
修正后代码
class Solution { public int[] solution(int[] A, int K) { // 边界情况处理:空数组、无需移位时直接返回 if (A == null || A.length == 0 || K <= 0) { return A; } // 取模减少无用循环,K大于数组长度时等效于移位K%length次 K = K % A.length; for (int a = 0; a < K; a++) { // 提前保存移位前的末元素值 int lastVal = A[A.length - 1]; // 从后往前遍历完成元素后移 for (int j = A.length - 2; j >= 0; j--) { A[j + 1] = A[j]; } // 末元素赋值给首位置完成一次右移 A[0] = lastVal; } return A; } }
内容的提问来源于stack exchange,提问作者Hello123456
相关产品推荐
相关产品推荐

