【问题标题】:Conditional statement true in both parts of if-else-if ladder条件语句在 if-else-if 阶梯的两个部分都为真
【发布时间】: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++ 工作,但我是一个非常新的(和零星的)两种语言的程序员。

【问题讨论】:

  • 不,他们没有。除非您使用某种我不知道的语言。

标签: java if-statement conditional-statements


【解决方案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 块。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-09
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多