2014-09-10 36 views
0

當其他語句都不爲true時,語句的else部分不會執行。java嵌套if語句else不起作用

if (personPlay.equals(computerPlay)) 
     System.out.println("It's a tie!"); 
    else if (personPlay.equals("R")) 
     if (computerPlay.equals("S")) 
     System.out.println("Rock crushes scissors. You win!!"); 
    else if (personPlay.equals("P")) 
     if (computerPlay.equals("R")) 
     System.out.println("Paper raps around rock. You win!"); 
    else if (personPlay.equals("S")) 
     if (computerPlay.equals("P")) 
     System.out.println("Scissors cut paper. You win!"); 
    else 
     System.out.println("you lose"); 
+7

使用括號'{}',你會發現錯誤在哪裏。 – 2014-09-10 15:53:25

+1

這是因爲第二個如果現在正在檢查第一個其他的嵌套if如果。同第三者一樣,如果第二個等等,你需要添加一些括號 – Chronicle 2014-09-10 15:53:37

+1

看看[這個主題](http://stackoverflow.com/questions/8020228/is-it-ok-if-i-omit-curly -braces-在-java的)。 – 2014-09-10 15:56:17

回答

3

使用括號:

if (personPlay.equals(computerPlay)) { 
    System.out.println("It's a tie!"); 
} else if (personPlay.equals("R")) { 
    if (computerPlay.equals("S")) 
     System.out.println("Rock crushes scissors. You win!!"); 
} else if (personPlay.equals("P")) { 
    if (computerPlay.equals("R")) 
     System.out.println("Paper wraps around rock. You win!"); 
} else if (personPlay.equals("S")) { 
    if (computerPlay.equals("P")) 
     System.out.println("Scissors cut paper. You win!"); 
} else { 
    System.out.println("you lose"); 
} 

正如評論所說,該代碼仍然不能工作,因爲邏輯是有缺陷的。您應該在每個內部if else子句,其中應打印「你輸」:

if (personPlay.equals(computerPlay)) { 
    System.out.println("It's a tie!"); 
} else if (personPlay.equals("R")) { 
    if (computerPlay.equals("S")) 
     System.out.println("Rock crushes scissors. You win!!"); 
    else 
     System.out.println("you lose"); 
} else if (personPlay.equals("P")) { 
    if (computerPlay.equals("R")) 
     System.out.println("Paper wraps around rock. You win!"); 
    else 
     System.out.println("you lose"); 
} else if (personPlay.equals("S")) { 
    if (computerPlay.equals("P")) 
     System.out.println("Scissors cut paper. You win!"); 
    else 
     System.out.println("you lose"); 
} else { 
    System.out.println("invalid input"); 
} 

或者你也可以消除內部if S和使用&&代替:

if (personPlay.equals(computerPlay)) { 
    System.out.println("It's a tie!"); 
} else if (personPlay.equals("R") && computerPlay.equals("S")) { 
     System.out.println("Rock crushes scissors. You win!!"); 
} else if (personPlay.equals("P") && computerPlay.equals("R")) { 
     System.out.println("Paper wraps around rock. You win!"); 
} else if (personPlay.equals("S") && computerPlay.equals("P")) { 
     System.out.println("Scissors cut paper. You win!"); 
} else { 
    System.out.println("you lose"); 
} 
+0

真正的程序員不需要託槽來保持他們的牙齒;) – injecteer 2014-09-10 15:55:48

+0

你可能也想修復他的邏輯:)用戶永遠不會「失去」,除非使用錯誤的輸入。 – user1071777 2014-09-10 15:55:59

+0

每次都使用括號,即使是嵌套的if也是如此。 – sp00m 2014-09-10 15:56:36