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

Java栈异常:推入String值后后续元素变为null问题求助

嘿,我一眼就瞅出你代码里的两个关键问题,这就是为啥第一次push正常,后面的元素全变成null的原因:

问题1:循环条件写错了,导致原有元素没全复制

你原来的循环是:

for (int i = 0; i < stack.length - 1; i++ )

这个条件会让你少复制一个元素!举个例子:

  • 当栈里已有1个元素时,stack.length -1是0,循环根本不会执行,新数组里就没有原来的元素;
  • 当栈里有2个元素时,只会复制第一个元素,第二个直接丢了。

正确的循环条件应该是遍历所有原有元素,也就是i < stack.length。

问题2:没有把新元素放入新数组的末尾

你的代码写到tm...就断了,明显是漏了把要push的element放到新数组的最后位置。新数组的长度是size = stack.length +1,所以最后一个索引是size -1,必须加上tmpStack[size - 1] = element;,不然这个位置就是默认的null,看起来就像你push的元素变成了null。

修复后的完整代码

public void push(E element) {
    if (isEmpty()) {
        stack = (E[]) new Object[1];
        stack[0] = element;
    } else {
        int size = stack.length + 1;
        E[] tmpStack = (E[]) new Object[size];
        // 修复循环:复制所有原有元素到新数组
        for (int i = 0; i < stack.length; i++) {
            tmpStack[i] = stack[i];
        }
        // 将新元素放到新数组的最后一位
        tmpStack[size - 1] = element;
        stack = tmpStack;
    }
}

小优化建议

手动写循环复制元素有点麻烦,还容易出错,你可以用Java自带的System.arraycopy来替代循环,代码更简洁高效:

// 替换原来的for循环
System.arraycopy(stack, 0, tmpStack, 0, stack.length);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:52:18