2013-06-18 12 views
12

Rozważmy następujący niesformatowany zagnieżdżony kod if-else JavaZagnieżdżony zachowanie if-else bez szelek

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

Moje pytanie brzmi: według specyfikacji języka Java, co jeśli robi else oddział zastosować?

Po ręcznym przeformatowaniu i dodaniu nawiasów klamrowych, który z nich jest poprawny?

Blok 1:

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

Blok 2:

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

Czy próbowałeś? – DannyMo

+3

... i dlaczego miałbyś napisać to bez aparatów ortodontycznych? – Rup

+10

Piszemy programy dla ludzi, aby je zrozumieć, zawsze piszemy, jeśli inne instrukcje z nawiasami klamrowymi –

Odpowiedz

23

Z documentation:

języka programowania Java, takich jak C i C++ i wielu języków programowania przed nimi, arbitralnie orzeka, że ​​klauzula else należy do najbardziej wewnętrznego, do którego może należeć.

+2

+1, pokonałeś mnie o 30 sekund :) – gaborsch

4

Można spróbować i okaże się, że else dotyczy wewnętrznej if:

http://ideone.com/iBorYi

Jest dobrym powodem, aby nie pisać kodu takiego jak thi s. Bardzo trudno jest przeczytać i zrozumieć, co się dzieje.

4

Blok 1 jest poprawna, jeśli else sytuacje bez nawiasów else jest związana z najbliższą jeśli

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

jest taka sama jak

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

również wsporniki są w trosce o poziom zrozumienia i łatwość. W większych jeśli else, nie mając uchwytów sprawia, że ​​błąd bardzo często