首先请记住,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但我不认为这是问题所在。 先谢谢!
答案 0 :(得分:0)
因为您将String
对象转换为char
,并且不允许这样做。除非你正在使用一个非常古老的java编译器,否则请使用泛型。使用Stack<String>
代替Stack
,您将在编译时收到错误消息。此外,不推荐使用Stack
。请改用Deque
。