一个逻辑直觉的问题

查看 69|回复 4
作者:dumbbell5kg   
Boolean b1 = scopes.stream()
                .anyMatch(x -> x.getProcessStatus() != complete || x.getProcessStatus() != close);
我写了这么一段代码,编译器告诉我这是有问题的,大家可以先想一下编译器提示了什么,下面有答案和我的疑问。
这个表达式是恒为 true 的,我是编译器告诉我后,想了一会才确认这个问题,我觉得奇怪的是这种判断应该是一种逻辑直觉,我没有这种直觉,我好奇这种直觉的缺失是怎么造成的?

编译器, 直觉, tpro, stat

AoEiuV020JP   
啊这,我第一眼也没发现,似乎脑补成了&&,
cleanery   
x.getProcessStatus() != complete || x.getProcessStatus() != close
两个不等, 或
只有一种情况才是 false
就是 x.getProcessStatus() == complete && x.getProcessStatus() == close 被满足的时候
cleanery   
你缺失的应该是等效替代的直觉, 看到这种表达式,我一般是去掉否定的同时逆转 或/与
判断条件尽量不要用否定, 因为人是没有否定直觉的。 如果用否定,也尽量让条件简单清晰
举个例子, 不要想小白兔--- 不要想小白兔--- 不要想小白兔--- 不要想小白兔
laqow   
交集是与,并集是或,但语言上与也可以是并集的意思
您需要登录后才可以回帖 登录 | 立即注册

返回顶部