如何使用java在cmd中运行的程序中输入

如何使用java在cmd中运行的程序中输入,java,cmd,Java,Cmd,我正在创建一个程序,它将接受源代码,编译它,并输入测试用例,以查看程序是否正确。一个源代码检查器,如果可以的话。我用来编译程序的是通过cmd。我现在的问题是,一旦程序在cmd中运行,如何输入测试用例。 这实际上是我们学校的一个项目。因此,教授将给出一个问题(例如,输入一个整数,比如它是偶数还是奇数),然后这个程序将通过测试教授提供的测试用例来检查学生的源代码(例如输入:1输出:奇数,输入2输出:偶数) 这是我的示例代码(c#编译器) 我的职能: public static void CsComp

我正在创建一个程序,它将接受源代码,编译它,并输入测试用例,以查看程序是否正确。一个源代码检查器,如果可以的话。我用来编译程序的是通过cmd。我现在的问题是,一旦程序在cmd中运行,如何输入测试用例。 这实际上是我们学校的一个项目。因此,教授将给出一个问题(例如,输入一个整数,比如它是偶数还是奇数),然后这个程序将通过测试教授提供的测试用例来检查学生的源代码(例如输入:1输出:奇数,输入2输出:偶数)

这是我的示例代码(c#编译器)

我的职能:

public static void CsCompiler() throws IOException, InterruptedException {
        Process(path + "\\", " c:\\Windows\\Microsoft.NET\\Framework\\v3.5\\csc /out:program.exe *.cs");
    }

public static void Process(String command, String exe) throws IOException, InterruptedException {
        final Process p;
        if (command != null) {
            p = Runtime.getRuntime().exec(exe, null, new File(command));
        } else {
            p = Runtime.getRuntime().exec(exe);
        }

        new Thread(new Runnable() {
            public void run() {
                BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String line = null;

                try {
                    while ((line = input.readLine()) != null) {
                        System.out.println(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        p.waitFor();
    }

public static void Run(String command) throws IOException, InterruptedException {
            String[] argss = {"cmd", "/c", "start", command};

            ProcessBuilder pb;

            pb = new ProcessBuilder(argss);
            pb.start();
        }

如果我没说错的话,您希望启动一个程序并获取其输出,同时从java方法注入输入。实际上,这非常简单,因为您已经在编译方法中执行了输出获取。
Process
类还有一个
getOutputStream
方法,您可以使用该方法向流程注入输入。
我将用一个例子说明如何做到这一点。
把这个简单的C程序看作是一个学生源代码,它把一个数字作为输入并检查它是偶数还是奇数。
#include <stdio.h>
int main(){
    int x;
    printf("Enter an Integer Number:\n");
    if (( scanf("%d", &x)) == 0){
        printf("Error: not an Integer\n");
        return 1;
    }
    if(x % 2 == 0) printf("even\n");
    else printf("odd\n");
    return 0;
}
就这样。如果你像这样调用这个方法

Run("NumberChecker.exe", "1");
Run("NumberChecker.exe", "2");
Run("NumberChecker.exe", "a");
您将获得以下输出

Enter an Integer Number:
odd
Exit with value 0
Enter an Integer Number:
even
Exit with value 0
Enter an Integer Number:
Error: not an Integer
Exit with value 1

如何输入测试用例?你能提供更多关于这个问题的细节吗?@KevinHooke编辑:)对不起,我今天只能上网。所以,在我尝试之后,没有输出,我不知道为什么。但是我试过执行.exe文件,它说它已经打开了,但是程序仍然没有显示任何输出,“带值退出”没有出现,实际上它工作了,哈哈。它首先在我的c#编译器上尝试过,但奇怪的是它没有。然后我尝试了你发布的代码,结果显示正确。非常感谢你的帮助
Run("NumberChecker.exe", "1");
Run("NumberChecker.exe", "2");
Run("NumberChecker.exe", "a");
Enter an Integer Number:
odd
Exit with value 0
Enter an Integer Number:
even
Exit with value 0
Enter an Integer Number:
Error: not an Integer
Exit with value 1