首先要记住 EXPRESSION 是 "2 + 3 * 5" 而 POSTFIX 表达式是 2 3 5 * +
这是我编写的一个方法,用于从具有后缀表达式的堆栈中提取运算符和操作数,然后评估整个事情。
// This method evaluates the postFix expression
public void evaluateRPN() {
int t1 = 0,
t2 = 0,
calculation = 0;
String oper;
double result;
// Empty stack
Stack stack = new Stack();
// Tokenize expression
Scanner scan = new Scanner(this.postfix);
char current;
while ( scan.hasNext() ) {
String token = scan.next();
if ( this.isNumber(token) ) { // if the token is an operand, push it onto the stack
stack.push(token);
} else { // If the token is an operator
t1 = (char) stack.pop();
t2 = (char) stack.pop();
calculation = (int) evalEx(t2, token, t1 );
stack.push(calculation);
}
}
this.finalExpression = (String) stack.pop();
}
现在当我运行这段代码时,它给了我一个错误: t1 = (char) stack.pop(); 我开始从堆栈中弹出第一个元素。此外 evalEx() 方法已经在其他地方声明并且它工作得很好。所以我的问题是,我在这里缺少什么?我知道我应该在 (else) 部分使用 try/catch,但我认为这不是问题所在。先谢谢了!