繁体   English   中英

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

[英]String input doesn't work in if-else statement

我是Java的新手,我创建了某种迷你游戏,我希望玩家选择是否要重新玩,我尝试将start boolean变量更改为静态类型并添加一些代码行,但是该代码似乎不起作用,每次我玩游戏时,它的确询问我是否要重播,但是问题是,即使我最后在控制台上输入“是”,游戏也不会似乎没有重启。 谁能帮我,我将非常感谢,谢谢!

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 ,比较区分大小写,因此,如果用户输入YesyEsplayAgain.equals("yes")将返回false

更新

正如Maroun Maroun所说,最好使用

"yes".equals(playAgain)

"no".equals(playAgain)

因为如果playAgain为null ,则不会抛出NullPointerException

尝试:

    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()检查字符串的字符是否相等, ==检查内存引用。

问题可能是这条线

if (playAgain == "yes")

(以及后来的一个)。

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

if (playAgain.equals("yes"))

问题是String比较完成的方式。

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

但是,在这种情况下,需要比较对象的值,以下代码将为您工作。

playAgain.equals("yes")

您需要使用String.equals()方法而不是==比较字符串

equals方法比较字符串的值,并且==检查两个对象是否引用相同的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM