在Java中使用stack.pop时抛出异常

时间:2013-11-06 02:04:53

标签: java exception stack

首先请记住,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但我不认为这是问题所在。 先谢谢!

1 个答案:

答案 0 :(得分:0)

因为您将String对象转换为char,并且不允许这样做。除非你正在使用一个非常古老的java编译器,否则请使用泛型。使用Stack<String>代替Stack,您将在编译时收到错误消息。此外,不推荐使用Stack。请改用Deque