web-dev-qa-db-ja.com

複数の「if」ステートメントと「if-else-if」ステートメントは、相互に排他的な条件で同じですか?

複数のifステートメントとif-else-ifステートメントの記述に違いはありますか?

複数のifステートメントを含むプログラムを作成しようとすると、期待した結果が得られませんでしたが、if-else-ifで機能しました。

条件は相互に排他的でした。

7
arnav bhartiya

複数のifステートメントを作成する場合、ステートメントは互いに独立しているため、複数のifステートメントがtrueと評価される可能性があります。

単一のifelse-if else-if ... elseステートメントを記述する場合、trueと評価できる条件は1つだけです(trueと評価される最初の条件が見つかると、次のelse-if条件はスキップされます)。

複数のifステートメントを単一のifelseのように動作させることができます-if .. elseステートメントif各条件ブロックがifステートメントを含むブロックから抜け出します(たとえば、メソッドから戻るか、ループから抜け出すことによって)。

例えば ​​:

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

と同じ動作になります:

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

ただし、returnステートメントがないと、x> 5とx> 7の両方がtrueの場合に動作が異なります。

13
Eran

両方が同じではありません。 ifステートメントはすべての条件をチェックします。複数のifステートメントを記述する場合は、すべての条件をチェックします。それ以外の場合は、満たされるまで条件をチェックします。 if/else ifが満たされると、そのブロックから外れます。

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

以下のコードの断片では、コンパイラはif条件をチェックし、最初にif条件がtrueになるとすぐに、条件がバイパスされる場合は残ります。

        if(){

        }
        else if
        {

        }
        else if
        {

        }
        else if
        {

        }
0
kavi temre

はい、違いがあります。 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

ご覧のとおり、最初のステートメント(someValue> 0)はtrueと評価されるため、コード#2が2番目のブロックに移動することはありません。

0
Virginie