此条件被破坏:
!"(".equals(uROPStack.peek()) && !uROPStack.empty()
如果
uROPStack
是空的,那么
uROPStack.peek()
将抛出
EmptyStackException
。
如果翻转条件,它将按预期工作:
!uROPStack.empty() && !"(".equals(uROPStack.peek())
在这里,由于
&&
操作人员
如果第一个条件为false(=堆栈为空),
然后是第二个条件(
.peek()
)不会执行,
你会得到想要的行为。
你没有问过,但另一个问题也在这里爆发:
if(!uROPStack.empty()) {
while("*".equals(uROPStack.peek()) || !"/".equals(uROPStack.peek())) {
uRStack.push(uROPStack.pop());
}
}
也就是说,既然你
uROPStack.pop()
在
while
环
这个
uROPStack。peek()
环路中的情况可能导致
清空堆栈异常
. 您需要确保堆栈在循环条件下不为空:
while(!uROPStack.peek().isEmpty() && ("*".equals(uROPStack.peek()) || !"/".equals(uROPStack.peek()))) {