条件语句在 if-else-if 阶梯的两个部分都为真

Posted

技术标签:

【中文标题】条件语句在 if-else-if 阶梯的两个部分都为真【英文标题】:Conditional statement true in both parts of if-else-if ladder 【发布时间】:2014-12-20 11:20:57 【问题描述】:

如果你有这样的代码:

if (A > X && B > Y)

   Action1();

else if(A > X || B > Y)

   Action2();

使用A > XB > Y,是否会执行if-else-if 阶梯的两个部分?

我正在处理存在这种情况的 Java 代码。我通常使用 C++ 工作,但我是一个非常新的(和零星的)两种语言的程序员

【问题讨论】:

不,他们没有。除非您使用某种我不知道的语言。 【参考方案1】:

如果您在谈论 C,那么只有满足条件的第一个块被执行 - 在控件“进入”条件块之后,它在所有其他条件之后“离开”。

如果你想要这样的行为,那么只需使用两个单独的条件 - 删除“else”就可以了。

【讨论】:

【参考方案2】:

如果A > XB > Y 都为真,那么您的代码将只执行Action1。如果条件之一为真,它将执行Action2。如果没有一个是真的,它什么也不做。

使用这个:

if (A > X || B > Y) 
   Action2
   if (A > X && B > Y) 
      Action1                                    
    

A > XB > Y 都为真时,这两种操作都可能发生。

【讨论】:

【参考方案3】:

if之后的条件为真时,只执行第一个块。 else在条件为假时执行。 else 块中的内容无关紧要,它不会被执行。 else 块是另一个 if 语句的事实是无关紧要的;它不会被执行,所以它永远不会执行(A > X || B > X) 测试,即使条件为真,它的主体也不会被执行。

【讨论】:

【参考方案4】:

不,它们不会同时执行。它按照您编写它们的顺序排列,从逻辑上讲这是有道理的;即使第二个读作“else if”,您仍然可以将其视为“else”。

考虑一个典型的 if/else 块:

if(true)
   // Blah
 else
   // Blah blah

如果您的第一个陈述是正确的,那么您甚至不必费心查看在 else 情况下需要做什么,因为它是无关紧要的。同样,如果你有'if/elseif',你就不会浪费时间查看后续的块,因为第一个是真的。

一个真实的例子可能是分配成绩。你可以试试这样的:

if(grade > 90)
   // Student gets A
 else if(grade > 80)
   // Student gets B
 else if(grade > 70)
   // Student gets c

如果学生得到了 99%,那么所有这些条件都是正确的。但是,您不会分配学生 A、B 和 C。

这就是为什么顺序很重要。如果我执行了这段代码,并将 B 块放在 A 块之前,那么您将为同一个学生分配 B 而不是 A,因为不会执行 A 块。

【讨论】:

以上是关于条件语句在 if-else-if 阶梯的两个部分都为真的主要内容,如果未能解决你的问题,请参考以下文章

JS基础——循环很重要

JS 循环

三元条件运算符中的多个条件?

C语言 回滚技术 switch case

Java基础之流程控制

三元运算符的嵌套详解:分别在JSTLJavaScript和Java中