首页 > 解决方案 > 何时使用 else if 而不是 if?

问题描述

假设我们有这样的代码:

if (condition_1)
   do this
if (condition_2)
   do that
else
   do blablabla

现在这个:

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

现在让我们逐行检查发生了什么。如果我没记错的话,第一个程序开始检查条件_1 是真还是假,那么条件_2 也会发生同样的事情。如果这些条件都不成立,程序就会运行“do blablabla”。

第二个程序从检查condition_1 开始,如果它为假,则检查condition_2。如果 condition_2 如果为假,则 if 什么都不做(我的意思是它忽略 else 语句)。如果是这样,第二个程序中的第二个 if 语句可以替换为:

if (!(condition_1) and condition_2)
   do that

但是 else then 可以运行,我认为每个 else if 语句都可以替换为只有 if 条件更长一些。那么这是否可以通过仅使用 if 来替换其他所有内容?“do blablabla”什么时候播出?

标签: c++if-statement

解决方案


第一部分:

 if (condition_1)
       do this

// previous if has nothing to do with this if & else 

if (condition_2)
   do that
else
   do blablabla

这种情况如果condition_2为真do that则将被执行,否则do blablabla 将被执行..

现在是第二部分:

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

在这里,第一个真正的条件将被执行,其余的else if&else将被忽略,所有的条件将被依次检查直到elsetrue找到一个条件。如果没有条件成立,那么else将被执行。如果这两个条件都满足,那么do blablabla将执行false

最后,是的 secondif可以替换为:

if (!(condition_1) and condition_2)
   do that

这是因为第二个 if 将被检查(do that将被执行)只有当condition_1is false.. 并且condition_2为 true 时。

这相当于:(当且仅当condition_1is false

if (!(false) and condition_2)
       do that

你可以通过检查之前的条件是否为假来替换 else if,这样每个else ifs 都有之前的条件,这很乏味。

例子:

if (a) {
    // do task1
} else if (b) {
    // do task2
} else if (c) {
    // do task3
} else {
    // do task4
}

相当于:

if (a) {
    // do task1
}
if (!a and b) {
    // do task2
}
if (!a and !b and c) {
    // do task3
}
if (!a and !b and !c) {
   // here is the else
   // do task4
}

何时使用 else if 而不是 if?

一般来说,我们链接if,else if 和 an elseat the last 以确保执行一个条件,如果一个是truerest 将被忽略并且执行转到 last 的最后一行 ( }) 的下一个else


推荐阅读