if(a && b || c || d || e)
是否检查(a && b)
,如果 a 且 b 必须始终为true,那么只允许在内部?或
((a && b) || a && c || a && d || a && e))
,任何条件都是真的,它会允许内部吗?
答案 0 :(得分:10)
如果我理解正确,在问题的第一部分,您会问a
和b
是否必须同时为整个表达式(a && b || c || d || e)
评估为真。
这个问题的答案是否定的。 Java运算符使&&
的优先级高于||
。所以等价的表达式是:
(a && b) || c || d || e
因此,如果a && b
或c
或d
或e
中的任何一个为真,则整个表达式将评估为真。例如,如果a
为false且c
为true,则表达式为真。
注意Java条件运算符短路。这意味着一旦表达式的最终结果已知,评估就会停止。例如,如果a
和b
都为真,则表示整体表达式必须求值为true,则不会评估c
,d
和e
。
对于问题的第二部分,我们可以应用相同的逻辑。因此,等效表达式为:
(a && b) || (a && c) || (a && d) || (a && e)
如果有任何子组件,这将评估为真,例如。 a && c
评估为真。正如其他人所指出的那样,a
必须为真,因为它是每个子组件的一部分。然后,如果任何其他变量为真,则表达式为真。
一旦你理解了这一点,就可以看到@ Arc676建议的这个表达式的简化是如何实现的:
a && (b || c || d || e)
我还应该补充一点,你问题中的两个表达式在逻辑上是不同的。它们相当于:
(a && b) || c || d || e
和
a && (b || c || d || e)
括号会影响评估顺序。在第一个中,a
和b
由&&
组合在一起,因此对于表达式的该部分(在括号中),两者都必须为真。在第二部分中,b
,c
,d
和e
按||
分组在一起。在这种情况下,只有b
,c
,d
和e
中的一个必须为表达式的那一部分(在括号中)才为真。< / p>
答案 1 :(得分:1)
如果这是大代码的一部分,那么您必须简化条件,以便处理器快速处理,以便在较短的时间内为您提供准确的编译。 根据我的最合适的条件可以是&#34; a&amp;&amp; (b || c || d || e)&#34;所以通过使用这样的条件,它只需要一步完成,而不是进入调用&#34; a&#34;每次....
要获得更多帮助,您可以查看此链接并帮助我很多...希望您能得到答案:&#34; http://www.homeandlearn.co.uk/java/java_if_else_statements.html&#34;
答案 2 :(得分:1)
((&amp;&amp; b)||(a&amp;&amp; c)||(a&amp;&amp; d)||(a&amp; e))
在这一个中,a必须始终为真,并且b,c,d或e必须为真。
if(a&amp; b || c || d || e)
在这一个中,a和b必须是真的,否则只有c或者只有d或者只有e必须是真的。
在代码段中,它显示a和b必须为true。如果a和b不为真,则可以检查c或d或e是否为真,那么它仍然是真的
function test(a, b, c, d, e) {
if ((a && b || c || d || e)) {
return a;
}
}
document.getElementById("demo1").innerHTML = " a = 1, b = 0, c = 0, d = 0, e = 0 answer: " + test(1, 0, 0, 0, 0);
document.getElementById("demo2").innerHTML = " a = 0, b = 1, c = 0, d = 0, e = 0 answer: " + test(0, 1, 0, 0, 0);
document.getElementById("demo3").innerHTML = " a = 1, b = 1, c = 0, d = 0, e = 0 answer: " + test(1, 1, 0, 0, 0);
document.getElementById("demo4").innerHTML = " a = 0, b = 0, c = 1, d = 0, e = 0 answer: " + test(0, 0, 1, 0, 0);
&#13;
<h1>JavaScript Variables</h1>
<p>In this example, a, b, c, d and e are variables</p>
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<p id="demo4"></p>
&#13;
答案 3 :(得分:1)
案例1:
if(a && b || c || d || e)
在这种情况下,您可以通过说z = a && b
来简化它
这意味着表达式变为
if(z || c || d || e)
这与上面的表达式相同。 z
仅在a
和b
为真时才为真。
案例2:
((a && b) || a && c || a && d || a && e))
正如Arc676所评论的那样,您可以将其简化为
a && (b || c || d || e)
在这里,您可以使用与案例1相同的技术来进一步简化它。
如果你采取y = b || c || d || e
。如果y
,b
,c
或d
中的任何一个为真,则e
的含义为真。然后你可以将表达式简化为
a && y
我不是说你应该总是简化这个,但是使用这种技术可以使长布尔语句更具可读性。
答案 4 :(得分:0)
if(a && b || c || d || e)
代表:
如果a
为true
且b
或c
或d
或e
为真,则会inside
。就是这样。
因此,如果a
为true
并且至少还有其他变量(b
或c
或d
或e
),那么它将会去内。否则它不会。
答案 5 :(得分:0)
答案 6 :(得分:0)
if(a && b || c || d || e) 可以被评估为下面的 1 和 2 :
1 -> if ( a && ( b || c || d || e) )
2 -> if ( (a && b) || (a && c) || (a && d) || (a && e))
结论如下:
当 --> a 为真且 b 或 c 或 d 或 e 中的任何一个为真时,该语句为真