繁体   English   中英

Java流程以及使用InputStream和OutputStream

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM