我目前正在尝试用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)的表达式可以正常工作。我的代码在哪里出错?
答案 0 :(得分:0)
每当我尝试使用多个运算符(例如5 + 5 + 5)计算表达式时,就会发生错误,说堆栈为空。
只要您尝试评估一个不合法的后缀的表达式,就会发生这种情况。
只有一个运算符(如5 + 5)的表达式可以正常工作。
不,他们不是。您发布的代码为5 + 5提供EmptyStackException
。
我的代码在哪里出错了?
你的代码中的错误&#39;。您的测试数据出了问题。 5 + 5 + 5不是后缀表达式。这是一个中缀表达。正确的后缀是555 ++。
5 + 5也不是后缀表达式。
但是你确实有一个错误。您需要推送每个运算符的结果,并将stack.pop()
的转换返回到double。而且,您无需检查isOperator()
else
块!isOperator()
中的{{1}}。