首页 > 解决方案 > 如何测试交互式java代码的速度?

问题描述

我的问题中的重要词是交互式的:对于编程竞赛(UVa 在线评委),我正在编写交互式 Java 代码:它在 System.out 上输出并等待 System.in 上的响应。

我想测试这段代码的速度,但如果我手动进行交互,我的人工打字技能会减慢执行速度,并且测量会有偏差。

因此,我想要一个线程/应用程序/脚本/任何东西,当我的应用程序在 System.out 上写入时看到,(这个线程/应用程序/脚本/任何东西)然后写入我的应用程序使用它的 System.in 读取的东西。

我的应用程序应该使用 System.in 和 System.out 进行通信,因为一旦我将它提交给在线评委,这就是它的评判方式。

我认为多线程不会完成这项工作,因为 System.in 总是从键盘读取,而不是从另一个线程读取。

import java.util.Scanner;

public class Main {

    public static void main(final String[] args) {
        System.out.println("What now?");
        final Scanner scanner = new Scanner(System.in);
        final String response = scanner.nextLine();
        scanner.close();
        System.out.println("Finished: " + response);
    }
}

我怎样才能让这段代码在没有人在键盘上打字的情况下运行?

标签: javaperformancetestinginteractive

解决方案


使用 Main 类作为引导方法,并在对InputStream(输入)和PrintStream(输出)进行操作的单独类中实现正在测试的代码。

import java.util.Scanner;

public class Main {
    public static void main(final String[] args) {
        MyCode code = new MyCode(System.in, System.out);
        code.run();
    }
}

System.in现在,您不再局限于System.outMyCode. 从测试中引导代码时,只需将 System.in 和 out 替换为测试代码写入和读取的普通流即可。


推荐阅读