如果你有这样的代码:
if (A > X && B > Y)
{
Action1();
}
else if(A > X || B > Y)
{
Action2();
}
使用A > X
和B > Y
,是否会执行if-else-if
阶梯的两个部分?
我正在处理存在此问题的Java代码。我通常在C ++工作,但我是两种语言中非常新的(和零星的)程序员。
答案 0 :(得分:10)
不,他们都不会执行。它按照你如何写它们的顺序排列,从逻辑上说这是有道理的;即使第二个读取'否则如果',你仍然可以将其视为'否则'。
考虑典型的if / else块:
if(true){
// Blah
} else{
// Blah blah
}
如果你的第一个陈述是真的,你甚至不必费心去看看在其他情况下需要做什么,因为它是无关紧要的。同样地,如果您有' 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块不会被执行。
答案 1 :(得分:3)
如果A > X
和B > Y
都为真,那么您的代码只会执行Action1
。如果其中一个条件为真,则执行Action2
。如果没有,那就什么都不做。
使用此:
if (A > X || B > Y) {
Action2
if (A > X && B > Y) {
Action1
}
}
当A > X
和B > Y
都为真时,会导致两种情况都发生。
答案 2 :(得分:1)
如果您正在谈论C,那么只有第一个满足条件的块才会被执行 - 在控制之后#34;进入"然后条件块"离开"在所有其他条件之后。
如果你想要这样的行为,那么只需使用两个独立的条件 - 删除"否则"你有它。
答案 3 :(得分:1)
当if
之后的条件为真时,仅执行第一个块。当条件为假时,else
块仅 执行。 else
块中的内容并不重要,它没有被执行。 else块是另一个if
语句的事实是无关紧要的;它不会被执行,因此它永远不会执行(A > X || B > X)
测试,即使该条件为真,也不会执行它的正文。