如果有多个&&,||条件评估java

时间:2015-12-23 05:02:26

标签: java if-statement

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

是否检查(a && b),如果 a b 必须始终为true,那么只允许在内部?或

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

7 个答案:

答案 0 :(得分:10)

如果我理解正确,在问题的第一部分,您会问ab是否必须同时为整个表达式(a && b || c || d || e)评估为真。

这个问题的答案是否定的。 Java运算符使&&的优先级高于||。所以等价的表达式是:

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

因此,如果a && bcde中的任何一个为真,则整个表达式将评估为真。例如,如果a为false且c为true,则表达式为真。

注意Java条件运算符短路。这意味着一旦表达式的最终结果已知,评估就会停止。例如,如果ab都为真,则表示整体表达式必须求值为true,则不会评估cde

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

(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)

括号会影响评估顺序。在第一个中,ab&&组合在一起,因此对于表达式的该部分(在括号中),两者都必须为真。在第二部分中,bcde||分组在一起。在这种情况下,只有bcde中的一个必须为表达式的那一部分(在括号中)才为真。< / 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是否为真,那么它仍然是真的

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:1)

戴夫的回答非常好。看那里解释一下。 如果你仍然遇到麻烦我会简化它。

案例1:

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

在这种情况下,您可以通过说z = a && b
来简化它 这意味着表达式变为

if(z || c || d || e)  

这与上面的表达式相同。 z仅在ab为真时才为真。

案例2:

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

正如Arc676所评论的那样,您可以将其简化为

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

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

a && y

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

答案 4 :(得分:0)

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

如果atruebcde为真,则会inside 。就是这样。 因此,如果atrue并且至少还有其他变量(bcde),那么它将会去内。否则它不会。

答案 5 :(得分:0)

好吧,我带着@dave回答了很好的解释。

我想补充几点。这里,catch是按评估顺序添加括号的顺序或顺序。

并且a && b充当单个元素。

有关if-else逻辑的更多信息,您可以参考this资源。

答案 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 中的任何一个为真时,该语句为真