前几天我在想创建"else-if"语句,以及为什么它的执行方式会确保每个事件互斥。
例如:
if(condition A)
//condition
else if(condition B)
//will run if condition A is false and condition B is true
else if(condition C)
//will run if condition A is false and condition B is false and condition C is true
else if(condition D)
//will run if all the above conditions are false and condition D is true.
如果条件A不成立,我认为检查所有"else"语句更有意义,而不是在B或C成立的情况下停止。我的直觉认为,将上述代码等效为以下代码会更自然:
if(condition A)
//condition
else {
if(condition B)
//...
if(condition C)
//...
if(condition D)
//...
}
因此,如果我们这样做,为什么我们要定义其他呢?它是为了避免不必要的if-else语句嵌套吗?我只是觉得它很模糊,把它等同于我的第二个代码片段是有意义的。
编辑:为了澄清困惑,我完全理解这两种说法并不总是等价的。我的问题主要是问,为什么else-if被定义为第一个语句并不总是等同于第二个语句?我在试着理解为什么其他事情会这样。
编辑2:我想我终于明白了问题的本质。通常,"else"会检查上述语句是否为false,如果为false,则运行该语句。然而,在elif的情况下,它在运行之前会检查上面的所有语句是否都是false。这与重复的问题不同,因为它询问的是"如果其他"本身的性质,而不是它的穷尽性。
第三版:我提出了一个新的问题,希望能更清楚,可以在这里找到。
人们更喜欢一种风格而不是另一种风格的原因是为了确保在测试条件时存在或不存在互斥。
如果条件B、C或D彼此不互斥,那么。。。
- 。。。在第一种情况下,由于
else if
语句的互斥性,只有条件B会触发 - 。。。在第二种情况下,条件B、C和D将触发,因为
if
语句使它们而非互斥
最终取决于您想要做什么。您可能想要以这种方式运行多个语句。但是,您可能不会。以互斥的方式设计语句可以确保在得到意想不到的结果或状态时不会遇到奇怪的逻辑错误。
如果你采用嵌套方法,并始终如一地应用它,你实际上会得到这样的结果:
if (condition A) {
// A
} else {
if (condition B) {
// B
} else {
if (condition C) {
// C
} else {
if (condition D) {
// D
}
}
}
}
每个CCD_ 3得到相同的处理。第一个if
语句没有任何特殊的能力从所有其他if
语句中删除else
块。你建议的语法赋予else
不一致的含义。
让我们举一个基本的例子。
假设,你想根据学生的成绩来打分,成绩是60分。
if(score <= 50) {
System.out.println("C Grade");
} else if(score <= 70) {
System.out.println("B Grade");
} else if(score <= 100) {
System.out.println("A Grade");
}
它将打印B Grade
。
if(score<=50) {
System.out.println("C Grade");
} else {
if(score <= 70) {
System.out.println("B Grade");
}
if(score <= 100) {
System.out.println("A Grade");
}
}
现在,根据您的说法,如果我们遵循上述方法,条件并不相互排斥。它将打印B Grade
和A Grade
,这不是真的。
因此,在if中的条件不相互排斥的情况下,您将遇到问题。这就是为什么需要嵌套if..else
。