连续扫描仪输入

Continuous Scanner input

我正在编写一个主要的实践项目,我可以在其中不断添加 类 来做完全不同的有趣事情。例如,我有一个 CoinFlipperCmd 和一个扑克牌 PotOddsCmd,代码目前工作正常,但我希望能够重复输入命令而不必重新运行程序。当前示例控制台:

FLIP 10 // coinflips 10 times and notes the outcome
You flipped 5 heads and 5 tails

在此之后,代码将退出,但我希望能够继续输入命令。像这样:

FLIP 5
You flipped 4 heads and 1 tails
FLIP 6
You flipped 3 heads and 3 tails
POTODDS 0.5 1
You have pot odds of 2:1

我正在使用扫描仪进行输入

import java.util.Scanner;  // Import the Scanner class


public class Main {

    public static void main(String[] args) {
        InputScanner();
    }

    private static void InputScanner() {
        Scanner myObj = new Scanner(System.in);  // Create a Scanner object
        System.out.println("Enter command");

        String command = myObj.nextLine();  // Read user input
        ParseAndDirect(command);
    }

    private static void ParseAndDirect(String command) {
        String[] commandSplit = command.split(" ", 2);
        String usercommand = commandSplit[0];

        if (usercommand.equals("FLIP")){
            CoinFlipperCmd.CoinFlipperCmd(commandSplit[1]);
        } else if (usercommand.equals("POTODDS")){
            PotOddsCmd.PotOddsCmd(commandSplit[1]);
        } else System.out.println("Invalid Command");
    }
}

除了允许用户重复输入命令外,我认为你还应该允许一些退出程序的方法(除了必须通过操作系统杀死它:-)在下面的代码中,我任意使用了单词 quit 作为退出循环的方式。请随意使用不同的字符串。

Scanner myObj = new Scanner(System.in);
String command = "";
while (!"quit".equalsIgnoreCase(command)) {
    System.out.println("Enter command");
    if (!"quit".equalsIgnoreCase(command)) {
        ParseAndDirect(command);
    }
}

顺便说一句,根据java naming conventions,方法名称应该是parseAndDirect,即它应该以小写字母开头。

您需要将输入部分放在一个循环中,例如

private static void InputScanner() {
    Scanner myObj = new Scanner(System.in); // Create a Scanner object
    String command;
    do {
        System.out.print("Enter command (q to quit): ");
        command = myObj.nextLine(); // Read user input
        if (!command.equalsIgnoreCase("q")) {
            ParseAndDirect(command);
        }
    } while (!command.equalsIgnoreCase("q"));
}

循环的另一种使用方式如下:

private static void InputScanner() {
    Scanner myObj = new Scanner(System.in); // Create a Scanner object
    String command;
    while(true)
        System.out.print("Enter command (q to quit): ");
        command = myObj.nextLine(); // Read user input
        if (command.equalsIgnoreCase("q")) {
            break;
        }
        ParseAndDirect(command);
    } 
}

旁注(因为它不会对程序的执行产生任何影响),你应该始终遵循Java naming conventions例如方法,ParseAndDirect 应该命名为 parseAndDirect 并且 InputScanner 应该命名为 inputScanner.