从控制台获取用户输入的正确方法

时间:2014-06-09 19:39:33

标签: java input java.util.scanner

我对你这些才华横溢的人有一点疑问!

我正在制作一个小型控制台游戏,没有什么太花哨,但肯定不简单,并且想要找到一种更有效的方法来做某事!我想做的就是从用户那里得到输入!

从一开始我就被教导使用扫描仪从控制台获取用户输入!这就是我一直用的东西!下面是我要写的一个例子。

package com.mattkx4.cgamedev.main;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Print out a message asking the user if ready
        System.out.println("Are you ready to continue? (Enter \"YES\" or \"NO\")");

        // Initialize a Scanner
        Scanner s = new Scanner(System.in);

        // Initialize a String to hold the User Input
        String in = s.nextLine();

        // Check the input with IF statements
        if(in.equalsIgnoreCase("YES")) {
            System.out.println("Let's continue!");
        }else if(in.equalsIgnoreCase("NO")) {
            System.out.println("Goodbye!");
            s.close();
            System.exit(0);
        }else{
            System.out.println("Please input a correct response!");
            main(null);
        }
    }
}

我绝对相信有更高效或更简单的方法来做到这一点!任何建议将不胜感激!

提前致谢 马修

1 个答案:

答案 0 :(得分:1)

Oracle Java Tutorial 本身总是说明了正确的方法。

在此处阅读I/O from the Command Line并查找示例代码。


修改

有些观点:

  • 再次调用main()方法将再次初始化所有内容。
  • 在多次检查的情况下尝试switch-case
  • 您可以使用do-while循环来实现相同的功能。

示例代码:

public static void main(String args[]) throws IOException {

    Console c = System.console();
    if (c == null) {
        System.err.println("No console.");
        System.exit(1);
    }

    boolean isValidResponse = false;
    do {
        String response = c.readLine("Are you ready to continue? (Enter \"YES\" or \"NO\"): ");
        switch (response.toUpperCase()) {
            case "YES":
                isValidResponse = true;
                System.out.println("Let's continue!");
                break;
            case "NO":
                isValidResponse = true;
                System.out.println("Goodbye!");
                break;
            default:
                isValidResponse = false;
                System.out.println("Please input a correct response!");
                break;
        }
    } while (!isValidResponse);
}