2013-06-22 35 views
0

我是Java的新手,并且创建了某种迷你游戏,并且我希望玩家选择是否要再次玩,我尝试更改我的启动布尔变量为静态类型并添加一些代码行,但代码似乎不起作用,每次我玩游戏时,它都会问我是否要重播,但问题是即使我最后在控制台键入“是”,游戏似乎不会重新启动。任何人都可以帮助我,我会非常感激,谢谢!字符串输入在if-else语句中不起作用

import java.util.Random; 
import java.util.Scanner; 

//Rocks, papers, scissors game complied by William To. 
public class RockPaperScissor { 
static int gamePlays = 0; 
static boolean start = true; 
public static void main(String[] args) { 
    while (start){ 
     @SuppressWarnings("resource") 
     Scanner userInput = new Scanner(System.in); 
     Random comOutput = new Random(); 
     System.out.println("Do you choose rock, paper or scissor?"); 
     String userChoice = userInput.nextLine(); 
     int comChoice = comOutput.nextInt(2); 
     switch (userChoice){ 

     case "rock": 
      if(comChoice == 0){ 
       System.out.println("I choose rock too! That's a draw!"); 
      } else if(comChoice == 1){ 
       System.out.println("I choose paper! I win!"); 
      } else { 
       System.out.println("I choose scissor! You win!"); 
      } 
      break; 

     case "paper": 
      if(comChoice == 0){ 
       System.out.println("I choose rock! You win!"); 
      } else if(comChoice == 1){ 
       System.out.println("I choose paper too! That's a draw!"); 
      } else { 
       System.out.println("I choose scissor! I win!"); 
      } 
      break; 

     case "scissor": 
      if(comChoice == 0){ 
       System.out.println("I choose rock! I win!"); 
      } else if(comChoice == 1){ 
       System.out.println("I choose paper! You win!"); 
      } else { 
       System.out.println("I choose scissor too! That's a draw!"); 
      } 
      break; 
     default : 
      System.out.println("I don't think that's an option."); 
      break; 
     } 
     gamePlays++; 
     System.out.println("You've played " + gamePlays + " games."); 

       //BELOW IS THE PART I want to ask, what's wrong? 

     System.out.println("Do you want to play again?"); 
     String playAgain = userInput.next(); 
     if (playAgain == "yes"){ 
      System.out.println("Restarting game..."); 
      start = true; 
     } else if (playAgain == "no") { 
      System.out.println("Quitting game."); 
      start = false; 
     } 
    } 
} 
} 

Eclipse中的打印输出:

Do you choose rock, paper or scissor? 
rock **//my input**  
I choose paper! I win! 
You've played 1 games. 
Do you want to play again?  
yes **//my input**  
Do you choose rock, paper or scissor? 
paper **//my input**  
I choose paper too! That's a draw! 
You've played 2 games. 
Do you want to play again? 
no **//my input** 
Do you choose rock, paper or scissor? 
+0

[我如何在Java中比较字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

+6

NOOOOOOOOOOOOOOOOOOOOOOOOO不是可能重复' ==''再次:_( – Maroun

+1

第100次我看到这个问题 –

回答

3

字符串比较需要String#equals而不是==。所以这个:

if (playAgain == "yes"){ 
    System.out.println("Restarting game..."); 
    start = true; 
} else if (playAgain == "no") { 
    System.out.println("Quitting game."); 
    start = false; 
} 

有可能成为这样的:

if (playAgain.equals("yes")){ 
    System.out.println("Restarting game..."); 
    start = true; 
} else if (playAgain.equals("no")) { 
    System.out.println("Quitting game."); 
    start = false; 
} 

为了正常工作。

不过,我建议使用String#equalsIgnoreCase,因为equals,比较是大小写敏感的,所以如果用户输入即YesyEsplayAgain.equals("yes")将返回false

UPDATE

由于Maroun Maroun说,最好用

"yes".equals(playAgain) 

and

"no".equals(playAgain) 

因为如果playAgain是null它不会抛出NullPointerException

+2

+1。虽然我更喜欢' “是”.equals(playAgain)'以防''playAgain'为'null',它不会是NPE。 – Maroun

+0

@MarounMaroun对!编辑, 谢谢! – BackSlash

+2

@MarounMaroun我总是想知道为什么人们总是把字符串字面先放。现在我知道,谢谢! –

3

问题可能是这条线

if (playAgain == "yes") 

(后来因为没有一个)。

Java中的字符串是对象。这意味着两个字符串可能具有相同的内容,即包含相同的文本,但就==而言仍然不是“相同的”。比较两个字符串,看看他们是否包含相同的文本,使用这样的:

if (playAgain.equals("yes")) 
+0

谢谢你们!我真的很感谢你的帮助:) –

+0

谢谢!我非常感谢你的帮助! :D –

0

你需要使用String.equals()法和比较字符串不==

equals方法比较的字符串和==检查的价值不管这两个对象是否指向相同的对象。

+0

_此外,你需要在开关块中的每个情况之后放置break语句,否则它不会跳出开关块并执行下面所有的开关case_在OP发布的代码中,他**正在做**那。 – BackSlash

+0

@ BackSlash无法注意..谢谢:)现在编辑答案 –

+0

谢谢你们两位! :D –

4

尝试:

if ("yes".equals(playAgain)) { 
     System.out.println("Restarting game..."); 
     start = true; 
    } else if ("no".equals(playAgain)) { 
     System.out.println("Quitting game."); 
     start = false; 
    } 

String#equals()检查字符串的字符平等,==检查存储器参考。

+3

+1。如果'playAgain'为'null',那么你不能得到NPE。 – Maroun

1

问题与String比较的完成方式有关。

playAgain == "yes",该检查将检查对象是否相等。

但是在这种情况下,对象的值需要进行比较,下面的代码将适用于您。

playAgain.equals("yes") 
+0

感谢您的回答! ^^ –