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

Java给定Solution类运行抛出java.lang.ArrayIndexOutOfBoundsException错误

Java duplicateZeros方法数组越界问题修复方案

这段代码抛出java.lang.ArrayIndexOutOfBoundsException的核心原因是内层循环访问了超出数组范围的下标,具体问题和修复方案如下:

错误原因

  • 内层循环数组访问越界:内层循环初始j = arr.length - 1,执行arr[j] = arr[j+1]时,j+1等于arr.length,超出了数组下标最大范围arr.length - 1,直接触发越界异常。
  • 移位逻辑错误:原代码的移位操作是将元素左移,和需求的「将i之后的元素右移一位,空出i+1位置放重复的0」完全相反,就算解决越界问题也无法实现预期功能。
  • 索引步进错误:没有对i额外加1,遇到0并完成复制后,下一次循环会遍历到新复制的0,导致重复复制,最终数组会被填充为全0。
  • 多余的边界判断:if (i!=arr.length)完全冗余,外层循环i < arr.length -1已经保证了i最大为arr.length - 2,i+1不会越界。

修复后代码

class Solution {
    public void duplicateZeros(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] == 0) {
                // 从后往前将i之后的元素右移一位
                for (int j = arr.length - 1; j > i; j--) {
                    arr[j] = arr[j - 1];
                }
                // 跳过已经复制的0,避免重复处理
                i++;
            }
        }
    }
}

修复说明

  • 修正了移位逻辑:将arr[j] = arr[j+1]改为arr[j] = arr[j-1],实现元素右移,同时从根源避免数组越界。
  • 增加i的额外步进:完成0的复制后i加1,跳过新复制的0,避免重复处理。
  • 移除冗余的边界判断,简化代码逻辑。
  • 外层循环保留i < arr.length - 1的限制,避免遍历到数组最后一位时无空位存放重复0的无效处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:36:03