为什么我们构建其他 - 如果是这样的话?

时间:2017-01-15 06:35:23

标签: java

前几天我在考虑创建" 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不为真,则检查语句,如果B或C为真,则不停止。我的直觉认为将上述代码等同于此更为自然:

if(condition A)
    //condition
else {
    if(condition B)
    //...
    if(condition C)
    //...
    if(condition D)
    //...
}

因此,为什么我们定义其他 - 如果我们这样做?它是否规避了if-else语句的不必要嵌套?我只是觉得它含糊不清,让它等同于我的第二个代码片段是有道理的。

编辑:为了消除困惑,我完全理解这两个陈述并不总是等价的。我的问题主要是问为什么其他 - 如果定义为第一个语句并不总是等同于第二个语句?我试图了解其他原因 - 如果按照它的方式运行。

编辑2:我想我终于理解了我的问题的根本本质。通常,"否则"检查上述语句是否为false,如果是,则运行该语句。但是,在elif的情况下,它会在运行之前检查以上所有语句是否都为false。这与重复的问题不同,因为它询问if-else本身的性质,而不是它的详尽性。

编辑3:我已经开启了一个新问题,希望更清楚,找到here

3 个答案:

答案 0 :(得分:2)

人们更喜欢一种风格而不是另一种风格的原因是在测试条件时确保是否存在互斥。

如果条件B,C或D彼此不相互排斥,那么......

  • ...在第一种情况下,由于else if声明的相互排他性,只有条件B才会触发。
  • ...在第二种情况下,由于if语句导致它们相互排斥,因此条件B,C和D将触发。

最终取决于你想做什么。您可能希望以这种方式运行多个语句。但是,您可能没有。以互斥的方式塑造您的陈述可确保您在得到您不期望的结果或状态时不会遇到奇怪的逻辑错误。

答案 1 :(得分:1)

如果你采用嵌套方法,并且一致地应用它,你实际上会想出这个:

if (condition A) {
    // A
} else {
    if (condition B) {
        // B
    } else {
        if (condition C) {
            // C
        } else {
            if (condition D) {
                // D
            }
        }
    }
}

每个if都会以同样的方式处理。第一个if语句没有任何特殊功能可以从所有其他else语句中删除if块。你建议的语法给else一个不一致的含义。

答案 2 :(得分:0)

我们来看一个基本的例子。

假设您想根据学生的分数授予成绩,分数为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 GradeA Grade,但这不是真的。

因此,在if中的条件不相互排斥的情况下,您将遇到问题。这就是为什么需要if..else的嵌套。