我正在尝试在java中为其他java程序编写自动评分程序。我的java程序使用ProcessBuilder创建一个进程(带有重定向的错误输出),然后执行学生的java类。
问题是,当我尝试从他们的输出流中读取时,我被阻止了。
现在作为测试,当我尝试在终端中单独运行他们的程序时,我尝试一次完成所有输入,但由于某种原因,我得到了相同的阻塞行为。他们的程序要求一个整数,然后是一串字符串。如果我输入整数,然后输入空格键,然后输入,程序将无法正常工作,我会被阻止。
这是学生的课程。假设Mid对象只是一个整数和一些字符串。尝试运行这个程序,然后输入实际上只需输入类似......
2 123456 matt smith 2 123455 jim bob 2 4 <- after the 4 hit enter
并观看程序的默认“阻止”行为。
import java.util.*;
public class HW3
{
public static Mid createMid()
{
Scanner in = new Scanner(System.in);
Mid myMid = new Mid();
System.out.print("Alpha? ");
myMid.alpha = in.next();
System.out.print("First name? ");
myMid.firstName = in.next();
System.out.print("Last name? ");
myMid.lastName = in.next();
System.out.print("Company? ");
myMid.company = in.nextInt();
return myMid;
}
public static void printMid(Mid x)
{
System.out.println("" + x.alpha + " " + x.lastName + " " + x.firstName + " " + x.company);
return;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Welcome to my HW3");
System.out.print("How many mids? ");
int numberMids = in.nextInt();
System.out.println("Is this your number..."+numberMids);
Mid[] arrayMids = new Mid[numberMids];
for(int i = 0; i < numberMids; i++)
{
arrayMids[i] = createMid();
}
System.out.print("What company would you like to print out? ");
int printCompany = in.nextInt();
for(int j = 0; j < numberMids; j++)
{
if(printCompany == arrayMids[j].company)
{
printMid(arrayMids[j]);
}
}
}
}
答案 0 :(得分:0)
当我在Eclipse中运行它(并创建一个Mid类)时,这个程序对我来说很好。您需要做的一件事是打印您实际输入的公司。如果您研究了您建议输入的输入行,那么这些公司都是2
,但您要求打印公司4
。
当我这样做时,没有任何内容打印出来(当然),但程序运行完成就好了。
当被要求打印时,如果我进入我实际输入的公司作为输入,这就是我所看到的:
Welcome to my HW3
How many mids? 2
Is this your number...2
Alpha? 123456
First name? matt
Last name? smith
Company? 2
Alpha? 123455
First name? jim
Last name? bob
Company? 2
What company would you like to print out? 2
123456 smith matt 2
123455 bob jim 2
哦,确保关闭扫描仪。完成使用后清理资源只是一种很好的编程习惯。
完整的代码清单我以前在Eclipse(Kepler)中运行它:
import java.util.Scanner;
public class HW3 {
public static class Mid {
String alpha;
String lastName;
String firstName;
int company;
}
public static Mid createMid() {
Scanner in = new Scanner(System.in);
Mid myMid = new Mid();
System.out.print("Alpha? ");
myMid.alpha = in.next();
System.out.print("First name? ");
myMid.firstName = in.next();
System.out.print("Last name? ");
myMid.lastName = in.next();
System.out.print("Company? ");
myMid.company = in.nextInt();
in.close();
return myMid;
}
public static void printMid(Mid x) {
System.out.println("" + x.alpha + " " + x.lastName + " " + x.firstName
+ " " + x.company);
return;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Welcome to my HW3");
System.out.print("How many mids? ");
int numberMids = in.nextInt();
System.out.println("Is this your number..." + numberMids);
Mid[] arrayMids = new Mid[numberMids];
for (int i = 0; i < numberMids; i++) {
arrayMids[i] = createMid();
}
System.out.print("What company would you like to print out? ");
int printCompany = in.nextInt();
for (int j = 0; j < numberMids; j++) {
if (printCompany == arrayMids[j].company) {
printMid(arrayMids[j]);
}
}
in.close();
}
}
HTH