在 Java 中使用堆栈计算后缀字符串表达式



我目前正在尝试为Java中的计算器程序实现一种评估方法。

public double evaluate() {
StringStack stack = new StringStack();
double result = 0;
for (int i = 0; i < postfixTokens.size(); i++) {
    if (!isOperator(postfixTokens.get(i))) {
        stack.push(postfixTokens.get(i));   //pushes operands to the stack
    }else if (isOperator(postfixTokens.get(i))) {   
        double op1 = Double.parseDouble(stack.pop());   //pops two operands to perform an operation
        double op2 = Double.parseDouble(stack.pop());
        switch(postfixTokens.get(i)) {
            case "+": result = op1 + op2; break;
            case "-": result = op2 - op1; break;
            case "/": result = op2 / op1; break;
            case "*": result = op1 * op2; break;
            }
        }
    }
    return result;
}

每当我尝试计算具有多个运算符(例如 5+5+5)的表达式时,都会发生错误,指出堆栈为空。 不过,只有一个运算符的表达式(例如 5+5)工作正常。我的代码哪里出错了?

每当我尝试计算具有多个运算符(例如 5+5+5)的表达式时,都会发生错误,指出堆栈为空。

每当尝试计算不是合法后缀的表达式时,都会发生这种情况。

不过,只有一个运算符的表达式(例如 5+5)工作正常。

不,他们没有。您发布的代码给出了 5+5 的EmptyStackException

我的代码哪里出错了?

你不会"在你的代码中出错"。您的测试数据出错了。5+5+5 不是后缀表达式。这是一个中缀表达式。正确的后缀是 555++。

5+5 也不是后缀表达式。

但是,您确实有一个错误。需要推送每个运算符的结果,并将stack.pop()的转换返回为双精度。而且您无需在!isOperator() else块中检查isOperator()

最新更新