while(!s.isEmpty() && prec(c) <= prec(s.peek())) {}
我程序中的以上语句已正确执行
但是下面的语句给了我emptyStackError
while(prec(c) <= prec(s.peek()) && !s.isEmpty()) {}
我所做的更改仅在while语句中,这给了我错误?
为什么两种情况下的工作方式都不相同?
最佳答案
在while
条件下,有2个检查,它们是and
和&&
:
while(!s.isEmpty() && prec(c) <= prec(s.peek()))
这两个检查序列很重要。首先,您需要检查
stack
是否为空。如果是,则第二次检查不附带。如果不为空,则在堆栈上执行s.peek()
进行prec(c) <= prec(s.peek())
检查。另一方面,如果您具有:
while(prec(c) <= prec(s.peek()) && !s.isEmpty())
第二个检查
!s.isEmpty()
基本上是没有用的,因为在s.peek()
的情况下,它不阻止代码执行empty stack
。因此它抛出empty stack error / exception
。因此,
s.isEmpty()
必须在第二次检查之前先出现。关于c - 虽然循环不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50271363/