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