【问题标题】: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 > X 和B > Y,是否会执行if-else-if 阶梯的两个部分?
我正在处理存在这种情况的 Java 代码。我通常使用 C++ 工作,但我是一个非常新的(和零星的)两种语言的程序员。
【问题讨论】:
标签:
java
if-statement
conditional-statements
【解决方案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 块。