условие if / else на той же строке не работает - PullRequest
1 голос
/ 13 ноября 2011

Почему это не работает?

if (condition) stuff; return;
else otherStuff;

или это

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

Я могу легко это исправить с помощью:

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

но я подумал, что еслиоператор блокирует всю строку, не исключая возврата.

Ответы [ 3 ]

8 голосов
/ 13 ноября 2011

Потому что с:

if (condition) stuff; return;
else otherstuff;

Условное условие if содержит один оператор stuff.

За ним следует несвязанный return оператор.

else сам по себе, что не является допустимой Java.

Точка с запятой - это терминатор оператора, а не EOL. Чтобы оператор был блоком, он должен быть окружен {}, в противном случае оператор заканчивается на ;.

2 голосов
/ 13 ноября 2011

Я хотел бы расширить приведенный выше ответ [Дейв Ньютон] .

Синтаксис без скобок можно использовать только в том случае, если у вас есть только одно утверждение ,Таким образом, это действительно:

Код:

if (expression)
   statement;

В приведенном выше операторе будет выполнено if expression==true.

В приведенном ниже коде он все еще будет работать, ноне то, что вы ожидаете:

Код:

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

Statement2 будет обрабатываться вне области действия оператора if, который отбрасывает вашу конструкцию if..else.Только оператор1 находится внутри if.Если вы хотите, чтобы в операторе if выполнялось несколько операторов, используйте скобки (как упоминалось выше):

Код:

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

Очевидно, что

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

сделает ваши дела.

Другие ссылки: Брекеты ваш друг

1 голос
/ 13 ноября 2011

Разрывы строк обрабатываются Java-компилятором как любой другой пробел. Вы не можете изменить синтаксис вашей программы, поместив вещи в одну строку. В ваших первых двух примерах вы, кажется, хотите, чтобы компилятор превратил два оператора stuff; return; в один составной оператор, связанный с if частью вашего if/else. Это именно то, для чего нужны скобки ({}).

...