2013-09-29 27 views
-2

我在想,如果有這兩個碼之間的任何差別:區別,如果,如果(JAVA)

代碼1:

if(isSleepy()){ 
    sleep(1); 
} else if (isBored()){ 
    dance(); 
    dance(); 
} else { 
    walkRight(50); 
    walkLeft(50); 
    if(isHungry()){ 
     eat(); 
    } 
} 

代碼2:

if(isSleepy()){ 
    sleep(1); 
} 
if (isBored()){ 
    dance(); 
    dance(); 
} 
walkRight(50); 
walkLeft(50); 
if(isHungry()){ 
    eat(); 
} 

我如果僅替換if-elseif-if鏈。這是否會影響有條件的過程?

+1

你試過運行它,看看會發生什麼? –

+0

是的。由於布爾型疲勞是錯誤的,所以在第一種情況下它會做「跳舞」兩次。在跳舞兩次後,「吃()」沒有被調用,所以我纔來到這裏來了解有條件的過程。 – Dreadlockyx

回答

3

這會影響條件過程嗎?

是的,它的作用。在第一種情況下,如果isSleepy()返回true,則從不調用isBored(),也不檢查其結果。在第二種情況下,它檢查,它是完全獨立的。同樣,如果isSleepy()返回true,則walkRightwalkLeft將不會在第一個塊中調用,但他們位於第二個塊中。

第一個代碼塊的重新格式化可能有助於使事情更加清晰;

if(isSleepy()){ 
    sleep(1); 
} else { 
    // The below only happens if isSleepy() returned false 
    if (isBored()){ 
     dance(); 
     dance(); 
    } else { 
     // These only happen if isSleepy() returned false AND isBored() returned false 
     walkRight(50); 
     walkLeft(50); 
     if(isHungry()){ 
      eat(); 
     } 
    } 
} 
+1

感謝您的明確解釋。代碼內評論幫助很大。 – Dreadlockyx

0

else if僅在前面的if條件失敗時檢查。如果一個接一個地執行和評估,無論preceeding if語句發生了什麼,簡單。

要了解,如果簡單地條件else iftrue這要是if條件爲真本身是從來沒有檢查翻譯if-else意味着

0

在第一種情況下,else塊從未檢查。

在第二種情況下,兩個if條件都被檢查並且第三個塊不在任何條件之內,它總是被執行。

這會影響有條件的過程嗎?

在第一個代碼中,條件是互斥的,但在第二個代碼中,兩個條件可能同時爲真。