Java switch语句中的扫描程序问题

Java switch语句中的扫描程序问题,java,switch-statement,Java,Switch Statement,我试图在一个方法中添加一个switch语句,然后将该方法放在另一个switch语句中。它没有像我预期的那样成功当我执行程序时,控制台希望我立即添加一个用户输入,这不是我想的。 以下是在执行程序后控制台中显示的内容: qwerty 你好,亲爱的朝圣者。你叫什么名字 鲍勃 你好,鲍勃。你准备好开始你的探索了吗?[是或否] 请用大写字母。。。[是或否] 应用程序代码 import java.util.Scanner; public class rolePlay { static Scann

我试图在一个方法中添加一个switch语句,然后将该方法放在另一个switch语句中。它没有像我预期的那样成功当我执行程序时,控制台希望我立即添加一个用户输入,这不是我想的。

以下是在执行程序后控制台中显示的内容:

qwerty

你好,亲爱的朝圣者。你叫什么名字

鲍勃

你好,鲍勃。你准备好开始你的探索了吗?[是或否]

请用大写字母。。。[是或否]

应用程序代码

import java.util.Scanner;

public class rolePlay {

    static Scanner player = new Scanner(System.in);
    static String system;
    static String choice = player.nextLine();

    public void letterError() {
        System.out.println("Please use capital letters...");
        System.out.println(system);

        switch (choice) {

        case "Yes" : System.out.println("May thine travels be shadowed upon by Talos...");
        break;
        case "No" : System.out.println("We shall wait for thee...");
        break;
        default: 
        break;
        }
    }
    public rolePlay() {

    }

    public static void main(String[] args) {

        rolePlay you = new rolePlay();

        System.out.println("Greetings, dear Pilgrim. What is thine name?");
        String charName = player.nextLine();
        System.out.println("Hello, " + charName + ". Is thou ready to start thine quest?");

        system = "[Yes or No]";
        System.out.println(system);
        //String choice = player.nextLine();

        switch (choice) {

        case "Yes" : System.out.println("May thine travels be shadowed upon by Talos...");
        break;
        case "No" : System.out.println("We shall wait for thee...");
        break;
        default : you.letterError();
        break;
        }

        player.close();
    }
}

当第一次访问该类时,该行只被调用一次。这就是为什么它需要用户立即输入。您需要在获取用户输入时调用
player.nextLine()
;在这种情况下,您应该在每个switch语句之前调用它,就像在您注释掉的行中一样。

调用
player.nextLine()
并将其分配给静态变量
choice
会导致问题。静态变量是在第一次调用类时检索的,在您的例子中,这意味着在调用main方法之前。当您希望用户向控制台输入内容时,不应在主方法内部为
choice
赋值,也不应将
player.nextLine()
赋值给
choice

    System.out.println("Greetings, dear Pilgrim. What is thine name?");
    String charName = player.nextLine();
    System.out.println("Hello, " + charName + ". Is thou ready to start thine quest?");

    system = "[Yes or No]";
    System.out.println(system);
    choice = player.nextLine();     

静态字符串选择
声明中删除
player.nextLine()
后应该是这样的。

可能的重复项可以添加原因并解释为什么会出现这种情况(
Static
)。这只部分解决了问题。应该还有另一个
choice=player.nextLine()
在切换前输入
letterError
,否则它将再次使用存储的选项(这将命中默认大小写而不执行任何操作)。
    System.out.println("Greetings, dear Pilgrim. What is thine name?");
    String charName = player.nextLine();
    System.out.println("Hello, " + charName + ". Is thou ready to start thine quest?");

    system = "[Yes or No]";
    System.out.println(system);
    choice = player.nextLine();