4

这是一个学校作业的问题,这就是我这样做的原因。

无论如何,我在 main 方法中使用 Stdin 制作了一个扫描仪(Scanner stdin = new Scanner(System.in); 是行),从程序运行时指定的 txt 读取数据。此 Scanner 主要按预期工作,但是我需要在以 Scanner 作为参数的自定义类中使用它:

    public PhDCandidate(Scanner stdin)
    { 

    name = stdin.nextLine();
    System.out.println(name); //THIS NEVER RUNS
    preliminaryExams = new Exam[getNumberOfExams()];

    for(int i = 0; i <= getNumberOfExams(); i++)
    {
        preliminaryExams[i] = new Exam(stdin.nextLine(), stdin.nextDouble());
    }
    System.out.print("alfkj");
   }

此时,任何对 Scanner 的调用都将结束程序,不会引发异常或错误。只有调用 .next() 有效。我可以让程序工作,但它会很老套,我真的不明白发生了什么。我怀疑我错过了一个非常简单的概念,但我迷路了。任何帮助,将不胜感激。

4

3 回答 3

3

请确保Scanner stdin在调用构造函数之前没有关闭并重新初始化,因为我怀疑这是问题所在,即如果您正在执行以下操作:

        Scanner stdin = new Scanner(System.in);
        .........
        stdin.close(); //This will close your input stream(System.in) as well  

        .....
        .....

        stdin = new Scanner(System.in);
        PhDCandidate phDCandidate = new PhDCandidate(stdin);

stdin构造函数内部不会读取任何内容,因为输入流System.in已经关闭。

于 2012-10-31T20:39:26.380 回答
1

你的代码对我来说很好。在 main 中创建扫描仪后,将其作为参数传递。

 public Test(Scanner stdin)
        { 
System.out.println("enter something");
        name = stdin.nextLine();
        System.out.println(name); //THIS NEVER RUNS


        System.out.print("alfkj");
       }
    public  static void main(String...args)throws SQLException {
        new Test(new Scanner(System.in));
}

output: enter something
        xyzabc
        alfkj
于 2012-10-31T20:33:36.957 回答
1

在您的 PhDCandidate 类中添加一个 set Name 方法。这样,您可以在 main 方法中创建一个 PhDCandidate 对象并打印名称或从 main 执行任何操作。

public static void main(String[] args) {

    PhDCandidate c = new PhDCandidate();
    c.setName(stdin.nextLine());
}
于 2012-10-31T20:37:09.680 回答