这是一个学校作业的问题,这就是为什么我要以这种方式来做。

无论如何,我在主要方法(Scanner stdin = new Scanner(System.in);是该行)中使用Stdin制作了扫描仪,从程序运行时指定的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()有效。我可以使该程序正常运行,但是会很麻烦,而且我真的不明白发生了什么。我怀疑我缺少一个非常简单的概念,但我迷路了。任何帮助,将不胜感激。

最佳答案

请确保在调用构造函数之前不要关闭并重新初始化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已关闭。

09-10 08:37
查看更多