Java扫描器类没有这样的元素异常错误

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


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

        }

为什么我会收到此错误?谢谢。


扬帆大鱼
浏览 73回答 1
1回答

慕侠2389804

s.close();关闭当前Scanner对象,以及所有底层流(System.in在本例中就是如此)。一旦标准输入流关闭,您就无法再打开它。因此,总而言之,在确定不再需要扫描仪并重新构建代码后,最好关闭它,如下所示:Scanner sc = new Scanner(System.in);for (int i = 0; i < 10; i++) {&nbsp; &nbsp; Student s = Test.readStudent(sc);&nbsp; &nbsp; // do something with your student object here}sc.close();并将你的方法更改为public static Student readStudent(Scanner s) throws IOException {&nbsp; &nbsp; Scanner s = new Scanner(System.in);&nbsp; &nbsp; System.out.println("Enter first name of student");&nbsp; &nbsp; String fname = s.nextLine();&nbsp; &nbsp; System.out.println("Enter middle name of student");&nbsp; &nbsp; String mname = s.nextLine();&nbsp; &nbsp; System.out.println("Enter last name of student");&nbsp; &nbsp; String lname = s.nextLine();&nbsp; &nbsp; System.out.println("Enter name format(1 for ',' and 2 for ';') ");&nbsp; &nbsp; int num = s.nextInt();&nbsp; &nbsp; s.nextLine(); // Need to consume new line&nbsp; &nbsp; System.out.println("Enter age of student");&nbsp; &nbsp; int age = s.nextInt();&nbsp; &nbsp; s.nextLine(); // Need to consume new line&nbsp; &nbsp; // no closing here&nbsp; &nbsp; return new Student(new Name(String.join((num == 1) ? "," : ";", fname,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mname, lname)), age);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java