在Java中使用堆栈计算后缀字符串表达式
我目前正在尝试用Java实现一个计算器程序的求值方法在Java中使用堆栈计算后缀字符串表达式,java,stack,expression,Java,Stack,Expression,我目前正在尝试用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));
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;
}
public双重评估(){
StringStack stack=新的StringStack();
双结果=0;
for(int i=0;i
每当我尝试使用多个运算符(如5+5+5)计算表达式时,就会出现一个错误,表示堆栈为空。但是,只有一个运算符(如5+5)的表达式工作正常。我的代码哪里出错了
每当我尝试使用多个运算符(如5+5+5)计算表达式时,就会出现一个错误,表示堆栈为空
每当您尝试计算一个非合法后缀的表达式时,就会发生这种情况
但是,只有一个运算符(如5+5)的表达式工作正常
不,他们没有。您发布的代码为5+5提供了一个EmptyStackException
我的代码哪里出错了
您不会“在代码中出错”。你的测试数据出错了。5+5+5不是后缀表达式。这是一个中缀表达式。正确的后缀是555++
5+5也不是后缀表达式
但是你确实有一个bug。您需要推送每个运算符的结果,并将
stack.pop()
的转换返回到double。您不需要在的else
块中检查isOperator()
!isOperator()
我猜问题是需要将结果
再次推入堆栈中。堆栈是字符串堆栈。我应该再次从双精度转换为字符串吗?实际上,为什么要使用string
堆栈?为什么不改为使用Double
stack呢?作业需要使用字符串stack。我明白了,那么除了将Double转换回字符串,您别无选择。