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);
}