我目前正在尝试为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()
。