这是一个学校作业的问题,这就是为什么我要以这种方式来做。
无论如何,我在主要方法(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
已关闭。