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

Java栈实现计算器问题:相同逻辑在方法内失效排查

问题分析与修复方案

核心问题:字符串比较误用==而非equals()

你遇到的逻辑失效问题,根源是Java中字符串内容比较不能用==,必须用equals()方法。

为什么测试代码能运行?

在main方法的测试代码里,你用的是字符串字面量("+"、"/"),JVM会把这些字面量存入字符串常量池,所以opStack.peek() != "/"中的两个字符串指向同一个对象,==判断碰巧生效。

但在calculate方法中,运算符是从split()得到的字符串,这些是新创建的字符串对象,和字面量"/"、"*"不是同一个对象,此时==比较的是对象引用而非内容,导致你的条件判断完全失效——即使栈顶是"/",opStack.peek() != "/"也会返回true,所以代码会执行内部逻辑。

修复步骤

1. 替换所有字符串比较为equals()

把所有判断运算符的==、!=都改成equals()或!equals():

  • 将opStack.peek() != "/" && opStack.peek() != "*"改为!opStack.peek().equals("/") && !opStack.peek().equals("*")
  • 将opStack.peek() == "*" || opStack.peek() == "/"改为opStack.peek().equals("*") || opStack.peek().equals("/")
  • Operate方法里的if (op == "+")等全部替换为if (op.equals("+"))

2. 修复Operate方法的分支错误

你写了两个else if (op == "-"),除法的分支完全写错了,改成else if (op.equals("/")):

public static double Operate(String op, Stack<Double> stack, double d)
{
    if (op.equals("+"))
    {
        double last = stack.pop();
        double first = stack.pop();
        d = first + last;
        
    }
    else if (op.equals("-"))
    {
        double last = stack.pop();
        double first = stack.pop();
        d = first - last;
    }
    else if (op.equals("*"))
    {
        double last = stack.pop();
        double first = stack.pop();
        d = first * last;
    }
    else if (op.equals("/"))
    {
        double last = stack.pop();
        double first = stack.pop();
        d = first / last;
    }
    return d;
}

3. 其他逻辑优化(可选)

  • 处理除法时要注意除数为0的情况,避免抛出运行时异常
  • 循环结束后如果栈中还有未处理的运算符,需要补充计算逻辑(比如测试用例最后可能残留未执行的运算)

修复后的关键代码片段

以else分支中的判断为例,修复后:

else
{
    opStack.push(arr[i]);
    if (opStack.size() == 2)
    {
        if (!opStack.peek().equals("/") && !opStack.peek().equals("*"))
        {
            op1 = opStack.pop();
            if (!opStack.peek().equals("/") && !opStack.peek().equals("*"))
            {
                op2 = opStack.pop();
                res = Operate(op2, numStack, res);
                numStack.push(res);
                opStack.push(op1);
            } 
            else 
            {
                opStack.push(op1);
            }
        }

    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:11:12