数组头部添加元素异常:首次生效后续失效,求技术帮助
问题分析与修复方案
嘿,我一眼就揪出问题所在了——你的push方法只更新了栈顶指针top,但完全没把要插入的元素p存到数组里!这就是为什么第一次插入可能看起来正常(说不定刚好数组初始默认值和你插入的元素巧合一致),但后续插入完全没效果的核心原因。
修正后的完整push方法
private static final int STACK_SIZE = 10; private double [] stack; protected int top; public ArrayStack() { stack = new double[STACK_SIZE]; top = -1; // 栈为空时top初始化为-1 } @Override public void push(double p) throws DataStructureException { if (!isFull()) { top++; stack[top] = p; // 这行是你漏掉的关键代码! } else { throw new DataStructureException("栈已满,无法插入新元素"); } }
关键逻辑说明
栈的标准push操作是两步走:
- 先将栈顶指针
top向上移动一位(top++),指向数组中新的可用位置 - 把要插入的元素赋值到这个新的栈顶索引位置
你之前只完成了第一步,相当于只给元素“腾了位置”,但没把元素放进去,数组里自然不会有任何变化。
额外验证建议
为了确认插入是否成功,你可以添加一个peek方法查看当前栈顶元素:
public double peek() throws DataStructureException { if (!isEmpty()) { return stack[top]; } else { throw new DataStructureException("栈为空,无法查看栈顶元素"); } }
同时确保你的isFull方法逻辑正确(数组索引从0开始,所以栈满时top等于STACK_SIZE - 1):
public boolean isFull() { return top == STACK_SIZE - 1; }
内容的提问来源于stack exchange,提问作者Stoufa Gheribi
相关产品推荐
相关产品推荐

