我需要一些关于 Java while 循环的澄清

I need some clarification on Java while loop

提问人:Zach Davis 提问时间:5/30/2016 最后编辑:SorenZach Davis 更新时间:5/30/2016 访问量:95

问:

为什么此代码可以退出 while 循环

while (!(!(x < 5) || !(y < 5)))

但事实并非如此

while ((x < 5) || (y < 5))
while循环 布尔逻辑

评论

3赞 bcorso 5/30/2016
!(!(x < 5) || !(y < 5)) == (x < 5) && (y < 5)
2赞 NineBerry 5/30/2016
德摩根定律 en.wikipedia.org/wiki/De_Morgan%27s_laws

答:

4赞 Alex Mantaut 5/30/2016 #1

这两个表达式不等价,

!(!A||!B) = A && B

检查德摩根定律

http://www.allaboutcircuits.com/textbook/digital/chpt-7/demorgans-theorems/

0赞 ajb 5/30/2016 #2

分解:

(!(!(x < 5) || !(y < 5)))

!(x < 5)等价于 ,同样地,对于 ,所以上面等价于x >= 5y

!(x >= 5 || y >= 5)

括号中的表达式是 if 或 is 5 或更大。因此,对于 的表达式,两者都必须小于 5--因为如果任何一个大于或等于 5,则带括号的表达式将为 。如果括号内的部分为 ,则整个表达式的平均值为 。因此,表达式仅当 both 且小于 5 时。也就是说,它等价于truexyfalsexytrue!truefalsetruexy

x < 5 && y < 5

这是德摩根定律的应用,但你不需要记住或理解定律就能看到它是如何运作的。你真正需要做的就是仔细思考表达式,并弄清楚表达式在什么条件下是真的还是假的。(如果你有一个包含大量变量的更复杂的表达式,德摩根定律可能会很有用。但在这种情况下,最好只是分解表达式并引入一些中间变量;否则你将无法理解你所写的内容,其他人也不会。boolean