while(!s.isEmpty() && prec(c) <= prec(s.peek())) {}
我程序中的上述语句正确执行
但是下面的语句给了我emptyStackError
while(prec(c) <= prec(s.peek()) && !s.isEmpty()) {}
我所做的更改只是在while语句中给出了错误? 为什么两种情况下的工作都不同?
答案 0 :(得分:0)
while(!s.isEmpty() && prec(c) <= prec(s.peek()))
•在这个while循环中,它会检查你的堆栈是否为空,只有当它不为空时它才会prec(c) <= prec(s.peek())
while(prec(c) <= prec(s.peek()) && !s.isEmpty())
•在此while循环中,它将首先比较prec(c) <= prec(s.peek())
,并且仅当为true时,它将检查堆栈是否为空。
第二个循环会给出错误,因为如果堆栈中没有任何内容,它仍会尝试比较prec(c) <= prec(s.peek())
,然后才意识到堆栈是空的。
问问自己,如果您的筹码是空的,那么它与prec(c) <= prec(s.peek())
的比较是什么?
所以只是为了弄清楚你的理解=&gt; 当prec(c)&lt; = prec(s.peek())时,你的循环终止......但是当你的堆栈为空时它也会终止。第二个while循环比较其中一个值恰好来自堆栈的值。如果你的堆栈是空的,它应该比较什么?