-2

我想知道这两个代码之间是否有任何区别:

代码 1:

if(isSleepy()){
    sleep(1);
} else if (isBored()){
    dance();
    dance();
} else {
    walkRight(50);
    walkLeft(50);
    if(isHungry()){
        eat();
    }
}

代码 2:

if(isSleepy()){
    sleep(1);
}
if (isBored()){
    dance();
    dance();
}
walkRight(50);
walkLeft(50);
if(isHungry()){
    eat();
}

我已经用 if only 替换了 if-elseif-if 链。这会影响条件过程吗?

4

3 回答 3

3

这会影响条件过程吗?

是的,它确实。在第一种情况下,isBored()如果isSleepy()返回 true,则永远不会调用或检查其结果。在第二种情况下,它检查,它是完全独立的。同样,如果返回 true,walkRight并且walkLeft不会在第一个块中调用,但它们在第二个块中。isSleepy()

重新格式化第一个代码块可能有助于使事情更清晰;

if(isSleepy()){
    sleep(1);
} else {
    // The below only happens if isSleepy() returned false
    if (isBored()){
        dance();
        dance();
    } else {
        // These only happen if isSleepy() returned false AND isBored() returned false
        walkRight(50);
        walkLeft(50);
        if(isHungry()){
            eat();
        }
    }
}
于 2013-09-29T15:58:33.460 回答
0

else if仅在前一个if条件失败的情况下检查。简单的 if 一个接一个地执行并评估,不管preceedingif 语句发生了什么。

理解简单翻译if-else意思

于 2013-09-29T15:58:08.693 回答
0

在第一种情况下,如果条件为真,else则永远不会检查块本身。else iftrueif

在第二种情况下,两个if条件都被检查并且第三个块不在任何条件内,它总是被执行。

这会影响条件过程吗?

在第一个代码中,条件是互斥的,但在第二个代码中,两个条件可能同时为真。

于 2013-09-29T15:58:22.117 回答