多个“if”语句和“if-else-if”语句在互斥条件下是否相同?

11

写多个 if 语句和写 if-else-if 语句有什么区别吗?

当我尝试用多个 if 语句编写程序时,它没有给出预期的结果,但使用 if-else-if 却可以。

条件是互斥的。


3
除非条件是互斥的,否则是有影响的。 - dcastro
3
"当我尝试使用多个 'if' 语句编写程序时,它没有给出预期的结果。但是使用 'if else-if' 就可以了。" 我认为你已经自己回答了你的问题... - Alexis C.
"If"语句在许多编程语言中都存在,是编程的基础之一。本网站是关于针对特定编程问题的问答,因此这样的讨论将过于宽泛和不相关。 - Abhay
你能否更具体地说明你所注意到的差异?另外,请提及你是否只关注正确性,而非风格/性能等。这将有助于避免你的问题被关闭。 - unj2
4个回答

20

当你编写多个if语句时,由于这些语句相互独立,可能会有不止一个条件被判断为true。

当你编写单个if else-if else-if ... else语句时,只有一个条件可以被判断为true(一旦找到第一个被判断为true的条件,下一个else-if条件将被跳过)。

如果每个条件块都退出了包含if语句的块(例如通过从方法返回或从循环中断),则可以使多个if语句的行为类似于单个if else-if .. else语句。

例如:

public void foo (int x)
{
    if (x>7) {
        ...
        return;
    }
    if (x>5) {
        ...
        return;
    }    
}

将具有与以下相同的行为:

public void foo (int x)
{
    if (x>7) {
        ...
    }
    else if (x>5) {
        ...
    }
}

但没有 return 语句时,当 x>5 和 x>7 同时为真时,它会有不同的行为。


3

是的,它有所不同:请查看if-then和if-then-else语句

此外,您可以轻松测试它。

代码#1:

    int someValue = 10;

    if(someValue > 0){
        System.out.println("someValue > 0");
    }

    if(someValue > 5){
        System.out.println("someValue > 5");
    }

将输出:
someValue > 0
someValue > 5

当代码 #2:

    int someValue = 10;

    if(someValue > 0){
        System.out.println("someValue > 0");
    }else if(someValue > 5){
        System.out.println("someValue > 5");
    }

只会输出:
someValue > 0

正如您所看到的,代码 #2 永远不会进入第二个块,因为第一个语句 (someValue > 0) 的结果为 true


1

不完全相同。 if语句将检查所有条件。如果你写多个if语句,它会检查每个条件。 如果else if检查到满足条件的条件,它就会停止检查。一旦if / else if被满足,它就会退出该块。


0
if()
{
stmt..
}
else
{
stmt
}
if()
{
stmt
}
here compiler will check for both the if condition.

在下面的代码片段中,编译器将检查if条件,一旦第一个if条件为真,剩下的if条件将被绕过。
        if(){

        }
        else if
        {

        }
        else if
        {

        }
        else if
        {

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接