非空堆栈的EmptyStackException

时间:2017-10-11 06:29:29

标签: java exception stack

如何处理此代码块的EmptyStackException?在读取文件的某些部分后,显示我的堆栈为空。我猜测它与push()pop()方法有关但不完全确定。

Stack<Integer> stack = new Stack<Integer>();
    int op1, op2, result = 0;
    String token;
    StringTokenizer tokenizer = new StringTokenizer(expr);

    while (tokenizer.hasMoreTokens()) {
        token = tokenizer.nextToken();
        char c = token.charAt(0);
        if (isOperator(c)) {
            op2 = ((Integer) stack.pop()).intValue();
            op1 = ((Integer) stack.pop()).intValue();
            result = evalSingleOp(token.charAt(0), op1, op2);
            stack.push(new Integer(result));

        } else {
            stack.push(new Integer(Integer.parseInt(token)));

        }

    }

    result = ((Integer) stack.pop()).intValue();
    return result;
}

2 个答案:

答案 0 :(得分:0)

由于以下代码行而引起异常。

Certificate Status: true

在循环的第一次迭代中,如果&#39; expr&#39; 的第一个字符是操作符,那么if中的条件变为true

op2 = ((Integer) stack.pop()).intValue();
op1 = ((Integer) stack.pop()).intValue();

但是因为它是第一次迭代,所以堆栈中没有任何操作数可以弹出。

上述代码适用于&#39; expr&#39; ,例如 1 2 + ,在运算符之前有足够的操作数,但不适用于& #39; expr&#39; ,例如 + 1 2 ,在运营商之前没有足够的(2)操作数。

答案 1 :(得分:-1)

我想,您应该在stack.length

之前检查stack.pop()