|
| 1 | +# 定时输入投放工具 |
| 2 | + |
| 3 | +面向对象课程电梯作业的辅助工具,根据静态的含有时间信息的输入文件,向**实时交互程序**的标准输入中**定时投放**输入内容,免去手动向控制台输入的麻烦。 |
| 4 | + |
| 5 | +本工具也可用于测试其他控制台实时交互的程序。 |
| 6 | + |
| 7 | +## 输入格式 |
| 8 | + |
| 9 | +以行为单位,每行的格式为 `[<time>]<text>` ,表示在运行开始后的 `<time>` 时间(单位为秒)向被测试程序输入一行 `<text>`。 |
| 10 | + |
| 11 | +例:被测程序需要在运行开始后第 `1.0` 秒输入一行 `1-FROM-1-TO-2`,第 `2.0` 秒输入一行 `2-FROM-1-TO-3`,则本工具所需的输入内容应为(以下内容推荐存储在文件中): |
| 12 | + |
| 13 | + [1.0]1-FROM-1-TO-2 |
| 14 | + [2.0]2-FROM-1-TO-3 |
| 15 | + |
| 16 | +在运行开始第 `2.0` 秒后,即被测程序读出一行 `2-FROM-1-TO-3` 后将立即读到 `EOF`,从而不再继续等待输入。 |
| 17 | + |
| 18 | +## 使用方法 |
| 19 | + |
| 20 | +本工具既可导入到自己的工程中作为工具类使用,也可作为一个完整可执行的程序借助管道使用。 |
| 21 | + |
| 22 | +对于个人作业而言,可将该工具的 Jar 包导入到 IDEA 工程中: |
| 23 | + |
| 24 | +- 在 IDEA 主界面上方菜单栏点击 `File` \-\> `Project Structure` |
| 25 | +- 在弹出的窗口左侧选择 `Libraries` |
| 26 | +- 点击上方 `+` 号,选择本工具的 Jar 包,将其添加入工程中。 |
| 27 | + |
| 28 | +本工具只含有一个 `TimeInput` 类,该类的部分源码: |
| 29 | + |
| 30 | +```java |
| 31 | +public class TimeInput { |
| 32 | + |
| 33 | + // 构造方法, 传入一个 InputStream 对象, 为静态的含有时间戳的输入, 格式见本文上一节 |
| 34 | + public TimeInput(InputStream inputStream) { /* ... */ } |
| 35 | + |
| 36 | + // 返回一个 InputStream 对象,将上述静态的输入转化为实时的输入 |
| 37 | + public InputStream getTimedInputStream() { /* ... */ } |
| 38 | +} |
| 39 | +``` |
| 40 | + |
| 41 | +使用示例 (以 `new TimeInput(System.in).getTimedInputStream()` 替换 `System.in`): |
| 42 | + |
| 43 | +```java |
| 44 | +import oo.util.TimeInput; |
| 45 | + |
| 46 | +import java.util.Scanner; |
| 47 | + |
| 48 | +public class Main { |
| 49 | + // Solution of A + B problem with multiple inputs. |
| 50 | + public static void main(String[] args) { |
| 51 | + // Scanner cin = new Scanner(System.in); |
| 52 | + Scanner cin = new Scanner(new TimeInput(System.in).getTimedInputStream()); |
| 53 | + while (cin.hasNext()) { |
| 54 | + int a = cin.nextInt(); |
| 55 | + int b = cin.nextInt(); |
| 56 | + System.out.println(a + b); |
| 57 | + } |
| 58 | + } |
| 59 | +} |
| 60 | +/* |
| 61 | +Sample content of `input.txt`: |
| 62 | +[1.0]1 2 |
| 63 | +[2.0]2 3 |
| 64 | +*/ |
| 65 | +``` |
| 66 | + |
| 67 | +本工具也可直接执行,用来在互测中测试他人的程序。 |
| 68 | + |
| 69 | +示例命令 (从 `input.txt` 中读取静态的输入内容, 并通过管道发射给 `Elevator.jar`): |
| 70 | + |
| 71 | +```shell |
| 72 | +java -jar TimeInput.jar < input.txt | java -jar Elevator.jar |
| 73 | +``` |
| 74 | + |
| 75 | +## 注意事项 |
| 76 | + |
| 77 | +- 该工具仅限本地调试使用。提交的作业**不应依赖**本工具。 |
| 78 | +- 推荐采用**导入 Jar 包**方式使用该工具,不建议直接将本工具源代码添加到个人作业中。 |
| 79 | +- <font color="red">**严禁**</font>将本工具(包括 Jar 包以及源代码)提交到作业仓库中,如因此导致被查重系统判定为抄袭,后果自负。 |
0 commit comments