Java scanner类没有此类元素异常错误

Java scanner类没有此类元素异常错误,java,java.util.scanner,Java,Java.util.scanner,我有一个带有静态方法的类测试来获取输入 class Test { public static Student readStudent() throws IOException { Scanner s = new Scanner(System.in); System.out.println("Enter first name of student"); String fname = s.nextLine();

我有一个带有静态方法的类测试来获取输入

 class Test {
        public static Student readStudent() throws IOException {
            Scanner s = new Scanner(System.in);
            System.out.println("Enter first name of student");
            String fname = s.nextLine();
            System.out.println("Enter middle name of student");
            String mname = s.nextLine();
            System.out.println("Enter last name of student");
            String lname = s.nextLine();
            System.out.println("Enter name format(1 for ',' and 2 for ';') ");
            int num = s.nextInt();
            System.out.println("Enter age of student");
            int age = s.nextInt();

            s.close();

            return new Student(new Name(String.join((num == 1) ? "," : ";", fname,
                    mname, lname)), age);

        }
    }
我可以为一个学生获取输入,但一旦我将其放入for循环中,我会得到一个
java.util.NoSuchElementException:No line found
错误

这是我的循环

for (int i = 0; i < 10; i++) {
            Student s = Test.readStudent();
        }
for(int i=0;i<10;i++){
Student s=Test.readStudent();
}
为什么我会犯这个错误?谢谢。

s.close()
关闭当前的
扫描仪
对象,以及所有底层流,在本例中为
系统。一旦标准输入流关闭,就无法再打开它

因此,总的来说,最好在确定不再需要扫描仪后关闭扫描仪,并按如下方式重新构造代码:

Scanner sc = new Scanner(System.in);
for (int i = 0; i < 10; i++) {
    Student s = Test.readStudent(sc);
    // do something with your student object here
}
sc.close();

该错误发生在哪一行?切勿关闭使用
系统的扫描仪。在
中。您知道该类吗?或者根本不关闭它。资源应该由打开它们的人关闭。在本例中是JVM。JVM在关机时正确地关闭系统。
public static Student readStudent(Scanner s) throws IOException {
    Scanner s = new Scanner(System.in);
    System.out.println("Enter first name of student");
    String fname = s.nextLine();
    System.out.println("Enter middle name of student");
    String mname = s.nextLine();
    System.out.println("Enter last name of student");
    String lname = s.nextLine();
    System.out.println("Enter name format(1 for ',' and 2 for ';') ");
    int num = s.nextInt();
    s.nextLine(); // Need to consume new line
    System.out.println("Enter age of student");
    int age = s.nextInt();
    s.nextLine(); // Need to consume new line

    // no closing here

    return new Student(new Name(String.join((num == 1) ? "," : ";", fname,
                mname, lname)), age);
}