17

次のフォーマットされていないネストされたif-elseJava コードを検討してください。

if (condition 1)
if (condition 2)
action 1;
else
action 2;

私の質問は次のとおりです。Java 言語仕様によると、elseブランチが適用される場合はどうなりますか?

手動で再フォーマットして中かっこを追加すると、これら 2 つのうちどちらが正しいですか?

ブロック 1:

if (condition 1) {
    if (condition 2) {
        action 1;
    } else
        action 2;
    }
}

ブロック 2:

if (condition 1) {
    if (condition 2) {
        action 1;
    }
}
else {
    action 2;
}
4

5 に答える 5

27

Java言語仕様から:

Java プログラミング言語は、C や C++、およびそれ以前の多くのプログラミング言語と同様に、else 句が属する可能性がある場合、else 句が最も内側に属することを任意に宣言します。

于 2013-06-18T15:24:50.727 に答える
6

ブロック 1 は正しいです。if else の場合、角かっこがない場合、else は最も近い if にリンクされます。

if (condition 1)  
if (condition 2)
action 1;
else
action 2;

と同じです

if (condition 1)
    if (condition 2)
    action 1;
    else
    action 2;

また、括弧は理解レベルと容易さのためのものです。より大きな if else ステートメントでは、角かっこがないとエラーが非常に一般的になります

于 2013-06-18T15:19:15.213 に答える
4

else試してみると、 が inner に適用されることがわかりますif

http://ideone.com/iBorYi

これは、このようなコードを書かない正当な理由です。何が起こっているのかを読んで理解するのは非常に困難です。

于 2013-06-18T15:18:28.527 に答える