这是一个学校作业的问题,这就是我这样做的原因。
无论如何,我在主方法中使用Stdin制作扫描仪(Scanner stdin = new Scanner(System.in);是行),从程序运行时指定的txt读取数据。此扫描程序在main中按预期工作,但我需要在以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");
}
此时,扫描程序的任何调用都将结束程序,不会抛出任何异常或错误。只调用.next()有效。我可以让程序工作,但它会很糟糕,我真的不明白发生了什么。我怀疑我错过了一个非常简单的概念,但我迷路了。任何帮助将不胜感激。
答案 0 :(得分: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
将无法读取任何内容。
答案 1 :(得分:1)
你的代码对我来说很好。在主要创建扫描器后将其作为参数传递。
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
答案 2 :(得分:1)
在PhDCandidate类中添加一组Name方法。这样,您可以在main方法中创建一个PhDCandidate对象,并打印名称或从main执行任何操作。
public static void main(String[] args) {
PhDCandidate c = new PhDCandidate();
c.setName(stdin.nextLine());
}