-2

これら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-elseif-if チェーンを if only に置き換えました。それは条件付きプロセスに影響しますか?

4

3 に答える 3

3

それは条件付きプロセスに影響しますか?

はい、そうです。最初のケースでは、呼び出されることも、 true を返すisBored()かどうかの結果がチェックされることもありません。isSleepy()2 番目のケースでチェックされ、完全に独立しています。同様に、walkRightandがtrue を返す場合walkLeft、最初のブロックでは呼び出されませんが 2 番目のブロックでは呼び出されます。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 ifif前の条件が失敗した場合にのみチェックされます。preceedingif ステートメントに何が起こっても、単純な if が次々に実行され、評価されます。

理解するには単にif-else意味を翻訳する

于 2013-09-29T15:58:08.693 に答える
0

最初のケースでは、条件が true の場合はブロック自体がチェックされない場合、ブロックはチェックされませんelseelse iftrueif

2 番目のケースでは、両方のif条件がチェックされ、3 番目のブロックはどの条件にも含まれていないため、常に実行されます。

それは条件付きプロセスに影響しますか?

最初のコードでは条件は相互に排他的ですが、2 番目のコードでは両方の条件が同時に真になる場合があります。

于 2013-09-29T15:58:22.117 に答える