java - 字符串输入在 if-else 语句中不起作用

标签 java string

我是Java新手,我创建了某种迷你游戏,我希望玩家选择是否想再次玩,我尝试将我的start boolean 变量更改为静态类型并添加一些行代码,但代码似乎不起作用,每次我玩游戏时,它都会问我是否要重玩,但问题是,即使我最后在控制台输入"is",游戏似乎没有重新开始。谁能帮助我,我将不胜感激,谢谢!

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? 

最佳答案

字符串之间的比较需要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 时,比较区分大小写,因此如果用户输入 YesyEs,则 playAgain.equals("yes") 将返回 false

更新

正如 Maroun Maroun 所说,最好使用

"yes".equals(playAgain)

"no".equals(playAgain)

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

关于java - 字符串输入在 if-else 语句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17249305/

相关文章:

java - 将 String[] 转换为 int[](或将 ArrayList<String> 转换为 ArrayList<Integer>)的优雅方式

java - 寻求有关实现堆数据结构的帮助

java - 怎样才能看到之前的记录呢?

java - 偷走垃圾收集留下的东西有多容易?

java - java中如何强制转义字符

java - 将字符串转换为 char[] - Java

java - 我可以在eclipse中配置包含java源文件的资源路径吗?

java - Spring Batch 或 BIRT 框架

MySQL HAVING 子句不适用于 ' ' 或 "",而是在没有 AS 语句的情况下工作

c# - 编译器是否优化了字符串文字?