2011-11-13 4 views
1

なぜこれは機能しませんか?if/else同じ行の条件が動作しない

if (condition) stuff; return; 
else otherStuff; 

またはこの

if (condition) stuff; return; 
else {otherStuff;} 

私は簡単にこの問題を解決することができます

if (condition) {stuff; return;} 
else otherStuff; 

が、私は、if文のブロック全体のラインはリターンを排除しないと思いました。

+0

なし、ブロックが第一セミコロンまでです。 – Dave

答えて

8

であるため:

if (condition) stuff; return; 
else otherstuff; 

if条件は単一の文、stuffを持っています。

これには無関係のreturnが続きます。

elseは法的Javaではありません。

セミコロンは、EOLではなくステートメントターミネータです。ステートメントをブロックにするには、ブロックを{}で囲む必要があります。そうでない場合は、ステートメントは;で終了します。

1

改行は、Javaコンパイラによって他の空白として扱われます。同じ行に物を置くことによって、プログラムの構文を変更することはできません。最初の2つの例では、コンパイラが2つのステートメントstuff; return;を、if/elseifに関連付けられた1つの複合ステートメントにするようにしたいようです。それはまさに中括弧({})のためです。

2

上記の回答 [Dave Newton]を展開したいと思います。

単一の文しかない場合は、角括弧なしの構文を使用できます。だから、これは有効です。

コード:以下のコードで

if expression==true.に実行されます上記、声明の中で

if (expression) 
    statement; 

、それはまだ動作しますが、あなたが期待するものではありません。

コード:

if (expression) 
    statement1; // only this is inside of the if 
    statemen2; // this is outside your if statement 

文2がoutsid扱われますあなたのif..else構造体をスローするif文の範囲のeです。 if文の中にはstatement1しかありません。あなたは複数のステートメントがあれば内で実行する場合は、(上述ポスターとして)ブラケットを使用します。

コード:

if (expression) { 
    statement1; // both of these will be executed if the expression is true 
    statement2; 
} 

をので、明らかに、

if (condition) {stuff; return;} 
else otherStuff; 

は自分のものを行います。

その他の参照:Braces are your friend

+1

実際、 'if'節はすべての場合に単一の文だけを受け入れます。しかし、このステートメントは、一連のステートメントを中括弧で囲むことによって形成された複合ステートメント(技術的には依然として単一のステートメント)です。 –

関連する問題