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

