如何处理此代码块的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;
}
答案 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()