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/

10-11 05:24