【问题标题】:Tricking Scanner the input comes from the userTricking Scanner 输入来自用户
【发布时间】:2019-02-22 00:49:54
【问题描述】:

我正在编写一个评分程序,它将对作业进行评分。我的学生必须在他们的一种方法中使用扫描仪。 我的评分器是一个单独的类,它调用学生的方法。当我使用扫描仪调用该方法时,它会提示我输入一些输入(应该如此)。我希望我的评分类能够调用该方法并自动输入一些预先确定的字符串,就好像它是由用户键入的一样,而不会暂停或暂停程序。

有什么方法可以在 Java 中实现吗?

提前谢谢你。

【问题讨论】:

  • 我知道这可能会令人困惑,但这实际上实现起来非常简单,假设您所有的学生都声明类和方法相同。因此,在您自己的班级中,只需实现您的扫描仪处理方法,从您的学生班级中调用一个方法。 :-)
  • 编写您的代码,以便您在一个方法中提示并接受用户输入,然后调用 另一个 方法对该输入进行操作。第二种方法只是获取一些数据来处理;它不知道也不关心这些数据来自哪里。因此,您可以“输入”您从用户那里获得的数据或凭空变出的数据。

标签: java java.util.scanner listener stdin


【解决方案1】:

您可以简单地将System.in 替换为您自己的输入流,也许是一个包含您希望提供给学生班级的输入的文件。

假设学生的班级如下所示:

import java.util.Scanner;

public class Student {
    public String prompt() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter some input:");
        return scanner.nextLine();
    }
}

你可以这样“评分”它:

import java.io.FileInputStream;
import java.io.IOException;

public class Grader {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("replies.txt"));
        Student student = new Student();
        String reply = student.prompt();
        assert reply.equals("reply");
    }
}

【讨论】:

    【解决方案2】:

    或者,您可以让学生阅读文件输入。您可以告诉所有学生输入文件的名称,当您运行学生的代码时,您的计算机上就会有输入文件。学生可以使用自己的测试用例测试自己的代码,并在提交时将代码更改为文件输入。您仍然可以让它们输出标准输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2014-02-19
      • 2015-11-10
      • 2014-06-20
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      相关资源
      最近更新 更多