如果有多个&&;,| |java中的条件求值

如果有多个&&;,| |java中的条件求值,java,if-statement,Java,If Statement,是否检查(a和&b),如果a和b必须始终为真,则只允许内部?或 ((a&&b)| a&&c | a&&d | a&&e)),任何条件在内部都是真的吗?如果我理解正确,在你问题的第一部分,你会问a和b对于整个表达式(a&&b | c | d | e)是否必须都是真的 这个问题的答案是否定的。Java操作符的优先级高于|。因此,等效表达式为: if(a && b || c || d || e) 因此,如果a&&b或c或d或e中的任何一个为真,则表达式作为一个整体将计算为真。例如,如

是否检查
(a和&b)
,如果ab必须始终为真,则只允许内部?或


((a&&b)| a&&c | a&&d | a&&e))
,任何条件在内部都是真的吗?

如果我理解正确,在你问题的第一部分,你会问
a
b
对于整个表达式
(a&&b | c | d | e)
是否必须都是真的

这个问题的答案是否定的。Java操作符的优先级高于
|
。因此,等效表达式为:

if(a && b || c || d || e)
因此,如果
a&&b
c
d
e
中的任何一个为真,则表达式作为一个整体将计算为真。例如,如果
a
为false,而
c
为true,则整个表达式为true

请注意,Java条件运算符存在短路。这意味着一旦知道表达式的最终结果,计算就会停止。例如,如果
a
b
都为true,这意味着整个表达式的计算结果必须为true,那么
c
d
e
将不进行计算

对于你问题的第二部分,我们可以应用相同的逻辑。因此,等效表达式为:

(a && b) || c || d || e
如果任何子组件(例如,
a&&c
的计算结果为真,则该值将计算为真。正如其他人所指出的,
a
必须为真才能使表达式为真,因为它是每个子组件的一部分。然后,如果任何其他变量为true,则表达式为true

一旦您理解了这一点,您就可以看到@Arc676所建议的这个表达式是如何简化的:

(a && b) || (a && c) || (a && d) || (a && e)
我还要补充一点,你问题中的两个表达在逻辑上是不同的。它们相当于:

a && (b || c || d || e)


括号影响求值顺序。在第一种情况下,
a
b
通过
&&
组合在一起,因此这两种情况都必须为真,才能使表达式的该部分(在括号中)为真。在第二种情况下,
b
c
d
e
|
分组。在这种情况下,对于表达式的该部分(括号中),只有
b
c
d
e
中的一个需要为真是的。

如果这是一个大代码的一部分,那么您必须简化条件,使处理器能够快速处理,以便在更短的时间内为您提供准确的编译。 根据我的说法,最合适的条件可以是“a&&(b | | | c | | | d | | | e)”,因此通过使用这种条件,它只需一步就可以完成,而不是每次都进入称为“a”的每个条件

更多的帮助,你可以查看这个链接,也帮助了我很多。。。希望你能得到答案:“.

如果(a&b|c|d|e)
代表:

如果
a
true
b
c
d
e
为true,则它将进入
内部。就这样。
因此,如果
a
true
,并且至少还有任何其他变量(
b
c
d
e
),则它将进入内部。否则就不会了

((a&b)| | | | | | | | | | | | | | | | | | | | | |

在这个例子中,a必须始终为真,b、c、d或e必须为真才能进入

if(a&b|c|d|e)

在这个例子中,a和b必须是真的,其他的只有c或者只有d或者只有e必须是真的

在代码段中,它显示a和b必须为真。如果a和b不正确,则可以检查c、d或e是否正确,然后仍然正确。
功能测试(a、b、c、d、e){
如果((a和b|c|d|e)){
返回a;
}
}
document.getElementById(“demo1”).innerHTML=“a=1,b=0,c=0,d=0,e=0回答:”+test(1,0,0,0);
document.getElementById(“demo2”).innerHTML=“a=0,b=1,c=0,d=0,e=0回答:”+test(0,1,0,0);
document.getElementById(“demo3”).innerHTML=“a=1,b=1,c=0,d=0,e=0回答:”+test(1,1,0,0);
document.getElementById(“demo4”).innerHTML=“a=0,b=0,c=1,d=0,e=0回答:”+test(0,0,1,0,0)
JavaScript变量
在本例中,a、b、c、d和e是变量


戴夫的回答很好。看看那里有什么解释。 如果你仍然有困难,我会简化它

案例1:

a && (b || c || d || e)
if(z || c || d || e)  
在这种情况下,您可以通过说
z=a&&b

这意味着表达式变为

if(a && b || c || d || e)
这与上面的表达式相同
z
仅当
a
b
为真时才为真

案例2:

a && (b || c || d || e)
if(z || c || d || e)  
正如Arc676所评论的,您可以将其简化为

((a && b) || a && c || a && d || a && e))
在这里,您可以使用与案例1相同的技术来进一步简化它。 如果你取y=b | | | c | | d | e
。如果
b
c
d
e
中的任何一个为真,则表示
y
为真。然后可以将表达式简化为

a && (b || c || d || e)

我并不是说你应该总是简化它,但使用这种技术可以使长布尔语句更具可读性。

好吧,我同意@dave answer,并给出了很好的解释

我想补充几点。在这里,关键在于如何或以何种顺序按求值顺序添加括号

a&&b
充当单个元素

有关if-else逻辑的更多信息,请参阅参考资料。

if(a和b | | | | c | | | d | e)可计算为以下1和2:

1->if(a&(b|c|d|e))

2->如果((a&b)| |(a&c)| |(a&d)| |(a&e))

结论如下: