首页 > 解决方案 > 扫描输入并再次启动循环或关闭它

问题描述

我编写了一个猜谜游戏,现在我遇到了问题。我想问用户他/她是否想再次玩,如果答案是“y”(是),重新开始游戏,如果答案是“N”(否)它应该结束循环。

如果我输入“否”,为什么它不会结束?有人可以帮我处理这部分代码吗?

我尝试过不同的事情,比如在课堂之外或内部定义它等。

public class GuessingGame {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Random rdm = new Random();// Welcome to the game

    System.out.println("Welcome!");

    // Generate random number
    int input = 0;
    do {
        int rdmNumber = rdm.nextInt(999) + 1;

        while (input != rdmNumber) {
            try {
                System.out.println("Please enter your guess:");
                int userGuess = Integer.parseInt(sc.next());
                input = userGuess;
            } catch (NumberFormatException e) {
                System.out.println("Not a number - try again!");
            }

            if (input > rdmNumber) {
                System.out.println("Too big!");
            } else if (input < rdmNumber) {
                System.out.println("Too small!");
            } else if (input == rdmNumber) {
                System.out.println("You win!");
            }
        }

        System.out.println("Play another Round? [y/N]");
        String nextRound = sc.nextLine();
        sc.next();
        if (nextRound.contains("y")) {
            input = 0;
        }

    }while (input == 0);
}
}

如果用户输入“y”,游戏应该重新启动,如果他/她输入“N”,游戏应该结束。

标签: java

解决方案


你只inputnextRound.contains("y"). 因此,对于“y”以外的任何输入,输入将保留0(您将其初始化为的值)。while 循环继续,因为input == 0它是真的。

正确的解决方案是将您的if陈述更改为:

if (nextRound.contains("N")) {
    input = 1;
}

或者:

if (nextRound.contains("N")) {
    return;
}

推荐阅读