switch语句中的java扫描程序问题
我试图在一个方法中添加一个switch语句,然后将该方法放在另一个switch语句中。它没有像我预期的那样成功当我执行程序时,控制台希望我立即添加一个用户输入,这不是我想要的强>
以下是我执行程序后控制台中显示的内容:
qwerty
Greetings, dear Pilgrim. What is thine name?
Bob
Hello, Bob. Is thou ready to start thine quest? [Yes or No]
Please use capital letters... [Yes or No]
应用程序代码
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();
}
}
# 1 楼答案
当第一次访问该类时,该行只被调用一次。这就是为什么它需要用户立即输入。您需要在想要获取用户输入时调用
player.nextLine()
;在这种情况下,您应该在每个switch语句之前调用它,就像您注释掉的那行一样# 2 楼答案
调用
player.nextLine()
并将其分配给静态变量choice
会导致问题。静态变量在第一次调用类时被检索,在您的例子中,这意味着在调用main方法之前。相反,当您希望用户向控制台输入内容时,不应该在main方法内部为choice
赋值,也不应该为player.nextLine()
赋值从
Static String choice
声明中删除player.nextLine()
之后应该是这样的