switch语句中的扫描程序问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了switch语句中的扫描程序问题相关的知识,希望对你有一定的参考价值。
我尝试在方法中添加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();
}
}
答案
static String choice = player.nextLine();
首次访问该类时,该行只会被调用一次。这就是它想要立即用户输入的原因。您需要在想要获得用户输入时调用player.nextLine()
;在这种情况下,您应该在每个switch语句之前调用它,就像在您注释掉的行中一样。
另一答案
调用player.nextLine()
并将其分配给静态变量choice
会导致问题。首次调用类时会检索静态变量,在您的情况下,这意味着在调用main方法之前。当您期望用户向控制台输入内容时,您应该不为choice
分配值并将player.nextLine()
分配给main方法内部的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 String choice
之后应该看起来像那样。
以上是关于switch语句中的扫描程序问题的主要内容,如果未能解决你的问题,请参考以下文章