提问人:Zach Davis 提问时间:5/30/2016 最后编辑:SorenZach Davis 更新时间:5/30/2016 访问量:95
我需要一些关于 Java while 循环的澄清
I need some clarification on Java while loop
问:
为什么此代码可以退出 while 循环
while (!(!(x < 5) || !(y < 5)))
但事实并非如此
while ((x < 5) || (y < 5))
答:
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 >= 5
y
!(x >= 5 || y >= 5)
括号中的表达式是 if 或 is 5 或更大。因此,对于 的表达式,两者都必须小于 5--因为如果任何一个大于或等于 5,则带括号的表达式将为 。如果括号内的部分为 ,则整个表达式的平均值为 。因此,表达式仅当 both 且小于 5 时。也就是说,它等价于true
x
y
false
x
y
true
!
true
false
true
x
y
x < 5 && y < 5
这是德摩根定律的应用,但你不需要记住或理解定律就能看到它是如何运作的。你真正需要做的就是仔细思考表达式,并弄清楚表达式在什么条件下是真的还是假的。(如果你有一个包含大量变量的更复杂的表达式,德摩根定律可能会很有用。但在这种情况下,最好只是分解表达式并引入一些中间变量;否则你将无法理解你所写的内容,其他人也不会。boolean
上一个:在多个条件下进行测试(C 语言)
下一个:具有非虚拟析构函数的派生类
评论
!(!(x < 5) || !(y < 5)) == (x < 5) && (y < 5)