2016-03-18 2 views
1

то, что является коротким оператором if и не имеет короткого утверждения if. Я нашел это в документе спецификации языка Java. It says следующихЧто такое Short if statement в java?

«Заявление, таким образом, грамматический разделено на две категории: те , которые могли бы закончиться, если заявление, которое не имеет пункта еще (а„ короткий, если заявления“) и те, которые, безусловно, не

только заявление, которые определенно не заканчиваются короткими, если заявление может появиться как непосредственный подоператор перед ключевыми словом еще в если утверждения, что действительно есть пункт еще.

Это простое правило предотвращает «свисающие е lse ". Исполнение поведение оператора с ограничением «не коротким if» равно , идентичное поведению выполнения такого же вида оператора без ограничения «без коротких»; различие обращается чисто для разрешения синтаксической трудности «

Может кто-нибудь, пожалуйста, объясните это

+4

вы действительно должны добавить предыдущую строку: «Язык программирования Java, такой как C и C++, и многие языки программирования перед ними, произвольно декретирует, что предложение else принадлежит самому внутреннему, если оно может принадлежать. по следующей грамматике: « –

+0

@NathanHughes Да, вопрос читается немного странно без контекста. Спасибо, что предоставили его. –

ответ

2

Разделенные на две категории:.?

те, которые могли бы закончиться, если заявление, которое имеет нет пункта еще ("короткий, если оператор")

if (condition) { 

} 

и те, которые, безусловно, не

if (condition) { 

} else { 

} 

Оставить из фигурные скобки, вы получите одну строку, если и остальные заявления.

if (condition) action(); // short-if 
// else doOther(); // optional 
4

В соответствии с определением в пункте, на который вы ссылаетесь; короткие, если заявление, если заявление, что соответствует лекалам

if (condition) { 
} 

if (condition) { 
} else if (condition) { 
} 

Не-короткому, если заявление не соответствует этому шаблону, например, она может быть любой из следующего

if (condition) { 
} else { 
} 

if (condition) { 
} else if (condition) { 
} else { 
} 

и так на.

В принципе, оператор «short if» является оператором if, который является известным, чтобы не иметь блока else.

+1

Вам нужно разместить пробел в этих 'elseif's. –

+0

@PaulBoddington Спасибо, Пол, слишком много разных языков, и просто набрав его в холодном состоянии (не записывая его в IDE), заговорили, чтобы я остался без пространства. Редактирование сейчас :) –

1

В дополнение к остальным 2 ответам, хорошо видеть, что проблема в том, что это правило позволяет избежать.

Например, что печать?

int a = 0; if (a == 1) if (a == 2) System.out.println("A"); else System.out.println("B"); 

Это может быть истолковано как

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
    else 
     System.out.println("B"); 

(который не будет печатать ничего), или как

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
else 
    System.out.println("B"); 

(который выглядит, как он должен напечатать "B").

Однако правило исключает второе из них, потому что эта часть if (a == 1) имеет предложение else, однако заявление if (a == 2) System.out.println("A"); является коротким, если.

Поэтому это ничего не печатает.

С другой стороны, если if (a == 2) был не короткий, если бы это выглядело так, и не было бы никакой двусмысленности, о которой можно было бы беспокоиться.

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
    else 
     System.out.println("C"); 
else 
    System.out.print("B"); 
+0

спасибо за ответ. В коде, который вы указали как int a = 0; if (a == 1) if (a == 2) System.out.println ("A"); else System.out.println ("B"); Но как указать это утверждение, если (a == 2) System.out.println («A»); является коротким, если coz, когда я запускаю коды с a = 1. Я получил результат как B. Тогда как сказать, что второй, если короткий, если. – BabyboB

0

отчетность подготовлена ​​таким образом, грамматически разделены на две категории: те, которые могли бы закончиться, если заявление, которое не имеет пункт еще («короткий, если заявление») и те, которые, безусловно, не так.

Это означает заявления разделены на StatementNoShortIf и Заявление. Какой Заявление может появиться в «короткой инструкции if» и StatementNoShortIf не может.

Короткий оператор if является оператором if без предложения else.

IfThenStatement: // short if statement 
    if (Expression) Statement 

IfThenElseStatement: // not short if statement 
    if (Expression) StatementNoShortIf else Statement 

IfThenElseStatementNoShortIf: // not short if statement 
    if (Expression) StatementNoShortIf else StatementNoShortIf 

только заявления, которые определенно не заканчиваются на короткий, если оператор может появиться в качестве непосредственного подоператора перед ключевым словом еще в, если утверждение, что действительно есть пункт еще.

Только StatementNoShortIf может появиться между if и else в не краткосрочным, если заявление.

И такой StatementNoShortIf должен быть немедленным подоператором этого if else заявления.

Это простое правило предотвращает проблему «болтаться еще». Исполнение инструкции с ограничением «не короткое, если» идентично поведению выполнения одного и того же вида без ограничения «не короткое, если»; различие делается исключительно для разрешения синтаксической трудности.

Поэтому рассмотрим висящий еще пример проблемы, как это:

if (door.isOpen()) 
    if (resident.isVisible()) 
     resident.greet("Hello!"); 
else door.bell.ring(); // A "dangling else" 

else не может быть частью первой if.

Если да, то в соответствии с немедленным подоператором правила , линия 2-3 должна быть StatementNoShortIf заявления, но это на самом деле IfThenStatemtn (коротким, если заявление), потому что StatementNoShortIf всегда нуждается в else , Следовательно, else должен быть частью второго, если, таким образом, проблема с болтающимися остатками решена.