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

数组头部添加元素异常:首次生效后续失效,求技术帮助

问题分析与修复方案

嘿,我一眼就揪出问题所在了——你的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操作是两步走:

  1. 先将栈顶指针top向上移动一位(top++),指向数组中新的可用位置
  2. 把要插入的元素赋值到这个新的栈顶索引位置

你之前只完成了第一步,相当于只给元素“腾了位置”,但没把元素放进去,数组里自然不会有任何变化。

额外验证建议

为了确认插入是否成功,你可以添加一个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:09