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

Java操作Stack类编译报错找不到stack.peek()方法如何解决

问题排查与修复

编译找不到stack.peek()方法的原因

java.util.Stack从JDK1.0版本就原生提供peek()方法,出现该编译报错基本是以下两类问题:

  • 同包下存在自定义的Stack类,且类中没有实现peek()方法。Java类加载会优先匹配同包下的自定义类,即使你导入了java.util.*也不会优先调用JDK自带的Stack类。
    修复方案:要么删除同包下的自定义Stack类,要么声明变量时写全类名:java.util.Stack stack = new java.util.Stack();
  • 代码存在语法异常导致编译器解析错误:你提供的代码片段里的引号是HTML转义字符",如果实际代码没有替换为正常的双引号",也会触发编译异常误报。

代码逻辑问题修复

你当前的removeGreen方法存在死循环漏洞:临时栈数据回写到原栈的逻辑写在了遍历原栈的循环内部,每次只处理栈顶1个元素就把临时栈全部内容压回原栈,永远遍历不完整个栈。同时字符串比较用!=是错误用法,只能比较对象内存地址,不能比较字符串内容。
修复后的完整removeGreen代码如下:

public static void removeGreen(Stack stack) {
    Stack tempStack = new Stack();
    // 遍历原栈所有元素,把非绿色元素存入临时栈
    while (!stack.isEmpty()) {
        String currentVal = (String) stack.peek();
        if (!"green".equals(currentVal)) {
            tempStack.push(stack.pop());
        } else {
            stack.pop();
        }
    }
    // 全部处理完成后,把临时栈元素倒回原栈恢复顺序
    while (!tempStack.isEmpty()) {
        stack.push(tempStack.pop());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:08