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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:07