连续扫描器输入

问题描述 投票:0回答:2

我正在写排序的主实践项目,我可以只是不断地添加类,做完全不同的有趣的事情。例如,我有一个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");
    }
}
java java.util.scanner
2个回答
1
投票

你需要把输入的部分放在一个循环里面,如

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命名惯例 例如,该方法。ParseAndDirect 应命名为 parseAndDirectInputScanner 应命名为 inputScanner.


0
投票

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

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

对了,根据 JAVA命名惯例 方法名称应该是 parseAndDirect即应以小写字母开头。

© www.soinside.com 2019 - 2024. All rights reserved.