2014-09-10 83 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