条件语句在 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 > X
和B > Y
,是否会执行if-else-if
阶梯的两个部分?
我正在处理存在这种情况的 Java 代码。我通常使用 C++ 工作,但我是一个非常新的(和零星的)两种语言的程序员。
【问题讨论】:
不,他们没有。除非您使用某种我不知道的语言。 【参考方案1】:如果您在谈论 C,那么只有满足条件的第一个块被执行 - 在控件“进入”条件块之后,它在所有其他条件之后“离开”。
如果你想要这样的行为,那么只需使用两个单独的条件 - 删除“else”就可以了。
【讨论】:
【参考方案2】:如果A > X
和B > Y
都为真,那么您的代码将只执行Action1
。如果条件之一为真,它将执行Action2
。如果没有一个是真的,它什么也不做。
使用这个:
if (A > X || B > Y)
Action2
if (A > X && B > Y)
Action1
当A > X
和B > 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 阶梯的两个部分都为真的主要内容,如果未能解决你的问题,请参考以下文章