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

Java实现栈push方法时遇数组下标越界错误求助

问题分析与修复方案

你的代码触发ArrayIndexOutOfBoundsException是因为两个核心错误,下面直接拆解问题并给出修复方案:

1. 数组末尾赋值索引越界

你在临时数组末尾添加元素时写了:

tempArr[tempArr.length] = i;

Java数组索引从0开始,长度为n的数组最大可用索引是n-1,用tempArr.length当索引必然越界。改成:

tempArr[tempArr.length - 1] = i;

2. 原数组元素复制不完整

循环复制原数组的条件是:

for(int j = 0; j < storage.length - 1 ; j++)

这个条件会漏掉原数组最后一个元素(比如原数组长度为3,j只会循环到1,索引2的元素没被复制)。正确的循环条件应该遍历原数组所有元素:

for(int j = 0; j < storage.length ; j++)

额外优化:简化push逻辑

你对height == 0的单独判断完全冗余,而且当前逻辑每次push都扩容,效率很低——只有当数组被填满(height == storage.length)时才需要扩容。优化后的完整push方法:

public void push(int i) {
    // 数组已满时才扩容
    if(height == storage.length) {
        int[] tempArr = new int[storage.length + 1];
        // 复制原数组所有元素
        for(int j = 0; j < storage.length; j++) {
            tempArr[j] = storage[j];
        }
        tempArr[height] = i;
        storage = tempArr;
    } else {
        // 数组有剩余空间,直接赋值
        storage[height] = i;
    }
    height++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:05:14