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

Java使用Stack的pop、peek方法查找元素索引计数异常问题排查

问题原因

你的bug根源是for循环的判断条件使用了动态变化的栈长度a.size(),同时循环变量i还在持续递增,二者共同作用导致循环提前终止,根本没有遍历到栈底部的元素。

我们以查找str = "b"的场景为例一步步拆解执行过程:
初始状态:栈内元素为[a, b, c, d, e, f],栈长度=6,i=0,计数b=0

  1. 第1次循环:i=0 < 6 成立,栈顶是f≠b,弹出f,b=1,栈长度变为5,i自增为1
  2. 第2次循环:i=1 <5 成立,栈顶是e≠b,弹出e,b=2,栈长度变为4,i自增为2
  3. 第3次循环:i=2 <4 成立,栈顶是d≠b,弹出d,b=3,栈长度变为3,i自增为3
  4. 第4次循环判断:i=3 < 3 不成立,循环直接终止。此时栈顶是c,还没有遍历到b和a,自然不会得到正确的计数结果。

查找a时的问题同理,循环提前终止,计数停在了3,不会继续遍历剩余元素。

修复方案

把for循环替换为while循环,只要栈不为空就持续判断即可,不需要额外的循环变量i:

public class Main {
    public static void main(String[] args) {
        Stack<String> a = new Stack<>();

        a.push("a");
        a.push("b");
        a.push("c");
        a.push("d");
        a.push("e");
        a.push("f");

        System.out.println(a);
        String str = "a";
        int index = 0;
        // 替换为while循环,只要栈不为空就继续判断
        while (!a.isEmpty()) {
            if (a.peek().equalsIgnoreCase(str)){
                break;
            }
            a.pop();
            index++;
        }
        System.out.println(str);
        System.out.println(index);
    }
}

修改后即可得到符合预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:57:00