[英]Java Process and using InputStream and OutputStream
我正在尝试用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]);
}
}
}
}
当我在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();
}
}
高温超导
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.