为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2023-08-09 17:25:58
我有一个带有静态方法的测试类来获取输入。 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();        }为什么我会收到此错误?谢谢。
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

s.close();关闭当前Scanner对象,以及所有底层流(System.in在本例中就是如此)。一旦标准输入流关闭,您就无法再打开它。


因此,总而言之,在确定不再需要扫描仪并重新构建代码后,最好关闭它,如下所示:


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

并将你的方法更改为


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

}



查看完整回答
反对 回复 2023-08-09
  • 1 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信