Java中获取输入并对其执行操作的设计模式

Java中获取输入并对其执行操作的设计模式,java,generics,design-patterns,lambda,Java,Generics,Design Patterns,Lambda,我正在尝试做一个tic-tac-toe游戏,我遇到了很多复制粘贴输入的工作。我试图弄清楚什么样的设计模式和实现能够提示用户,收集他们的输入,比较它们,然后通过赋值来执行操作。现在我的代码是这样的 public void promptPlayerCount(BufferedReader in) throws IOException { String input; // initial prompt System.out.println("How many players

我正在尝试做一个tic-tac-toe游戏,我遇到了很多复制粘贴输入的工作。我试图弄清楚什么样的设计模式和实现能够提示用户,收集他们的输入,比较它们,然后通过赋值来执行操作。现在我的代码是这样的

public void promptPlayerCount(BufferedReader in) throws IOException {
    String  input;

    // initial prompt
    System.out.println("How many players?");
    input = "try again";
    while (input.equals("try again")) {
        input = in.readLine();
        // extract data and check it
        switch (Integer.parseInt(input)) {
            case 1:
                // assignment
                playerCount = 1;
                break;
            case 2:
                playerCount = 2;
                break;
            default:
                input = "try again";
                // clarified instructions
                System.out.println("please enter 1 or 2");
        }
    }
}
我有一部分人认为我可以创建一个函数(可能是工厂?),它允许我通过向构造函数传递初始提示、提取方法、赋值操作和澄清消息的细节来生成函数


最好使用lambda函数来实现这一点吗?

文本输入很难,尤其是当您不能信任您的用户时(比如在游戏中)。如果你的值不是整数,你的parseInt会立即抛出一个讨厌的异常

而且标准中的不友好。我假设这是一个作业,所以我不会因为你使用它而责备你,但是在任何你不必使用stdin的地方,不要。问题是,要让Java响应少于一整行的内容并在末尾输入enter是非常困难的

在处理用户输入时,我几乎总是修剪它(只是因为他们喜欢在开头和结尾插入随机的空格),然后检查它是否为空。这可能被放入一个函数中,该函数要么显示错误,要么以“空”退出程序,否则返回字符串

如果您经常需要int值,请编写第二个函数来调用第一个函数。让第二个函数返回int,但是如果文本无效,让它捕获异常并再次提示用户。您甚至可以让此函数将整数的“范围”作为参数并提供提示。因此,上面的内容可能是这样的:

playerCount = getUserInput("Please enter the number of users", 1, 2);
其余部分被包装在简单的非冗余函数中

我不会为您编写代码,因为A)这可能是一个家庭作业,有趣的部分实际上是编写代码,B)在我键入此代码之前,其他人可能会提供完整的代码解决方案:(


祝你好运。

你为什么要使用lambda表达式和泛型?你现在复制的是什么类型的代码?你能举个例子吗?可能相关:我只是想知道lambda函数是否是构造类/函数来处理赋值行为的最佳方法。真正被复制的代码是logic(显示消息,循环直到获得有效输入,如果有效则分配,如果输入不正确则给出澄清消息)我正在做的其他提示的例子是询问他们想把他们的作品放在哪里,如果他们想再玩一次,以及我想添加的其他随机提示。什么可以很好地替代终端游戏的System.in?为什么你建议使用静态方法?为什么不创建一个具有行为的新对象?@TheFaceofBee有一个原因在上,您很可能从未见过java控制台游戏。如果必须的话,您可以使用jline库,但它似乎超出了这个问题。@Nikolas我想我觉得我没有足够的关于他的问题空间的信息来设计一个不会混淆和可能误导的OO解决方案……而且它不是真的必要。它会设计一个包含各种I/o方法的“Console”对象可能是一个不错的主意,这些方法包装了所有的Console I/o,但正如我所说的,这听起来像是一个家庭作业,我不想混淆这个问题。