【问题标题】:Scanner problems in switch statementswitch 语句中的扫描仪问题
【发布时间】:2018-08-11 00:21:17
【问题描述】:

我试图在一个方法中添加一个 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();
    }
}

【问题讨论】:

标签: java switch-statement


【解决方案1】:
static String choice = player.nextLine();

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

【讨论】:

  • 您可以添加原因并解释为什么会这样 (static)。
【解决方案2】:

调用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();     

Static String choice 声明中删除 player.nextLine() 后应该是这样。

【讨论】:

  • 这只是部分解决了问题。在letterError 的切换之前应该有另一个choice = player.nextLine();,否则它将再次使用存储的选择(这将达到默认情况并且什么都不做)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多