一个逻辑直觉的问题

357 天前
 dumbbell5kg
Boolean b1 = scopes.stream()
                .anyMatch(x -> x.getProcessStatus() != complete || x.getProcessStatus() != close);

我写了这么一段代码,编译器告诉我这是有问题的,大家可以先想一下编译器提示了什么,下面有答案和我的疑问。















这个表达式是恒为 true 的,我是编译器告诉我后,想了一会才确认这个问题,我觉得奇怪的是这种判断应该是一种逻辑直觉,我没有这种直觉,我好奇这种直觉的缺失是怎么造成的?

2159 次点击
所在节点    程序员
26 条回复
LLaMA2
355 天前
x.getProcessStatus() != complete || x.getProcessStatus() != close

如果你的 getProcessStatus 某个时刻只能是多个状态中其一的话,

那么你这个条件必定是成立的。

因为你的状态不可以叠加,那么

x.getProcessStatus() != complete
x.getProcessStatus() != close

必定有一个是 true , || 的时候有一个为 true ,不用多想,true !!!!
dumbbell5kg
355 天前
@ye4tar 请问不可叠加是什么意思?
dumbbell5kg
355 天前
@cleanery 一下就被你说明白了
dumbbell5kg
355 天前
@geelaw
@yxd19
我的问题,忘了说是 Java 语言,用的开发软件是 IDEA ,而且是开发软件提示的,并不是编译器,提问的时候没多想。
dumbbell5kg
355 天前
这个问题不应跟代码扯上关系,其实我问的就是“数字 a !=1 或者数字 a !=2”表达式恒为 true 这个逻辑
非常抱歉造成的困扰
LLaMA2
353 天前
@dumbbell5kg “数字 a !=1 或者数字 a !=2”

这个数字只会有一种情况啊,
他总不能即是 1 又是 2 吧,
只有他即是 1 又是 2 的时候 才是 false ,
所以我说他不能叠加,任何时候 a 只能是其一!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX