当前位置: 首页 > 知识库问答 >
问题:

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

吕奇
2023-03-14

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

 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:没有找到行错误。

这是我的循环

for (int i = 0; i < 10; i++) {
            Student s = Test.readStudent();
        }

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

共有1个答案

东门焕
2023-03-14

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);
}
 类似资料:
  • 问题内容: 所以这是我的代码: 由于某种原因,我收到了No Such Element Exception 我不确定为什么。基本上我的程序正在搜索两个文本文件-armour.txt和TreasureClassEx.txt。getTreasureClass从怪物那里获得一个宝藏类,并在txt中搜索,直到到达基础装甲项目(不以tc:开头的字符串。)然后,它在getArmor中搜索与所获得的基础装甲名称相

  • 我有一个基类,在其中我将webDriver定义为(使用Guice)。这定义了我的beforeclass以及下面的代码行 我有另一个类在beforesuite之后执行,它有一个method1,我在其中为给定函数编写了测试。看起来是这样的 我尝试在click语句上方添加以下行: log.info(webdriver.findelement(by.xpath(Element1)).getAttribut

  • 我正试图使用扫描仪从键盘上获取一个int值,但我得到了以下错误: 写入核心转储失败。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

  • 当我尝试使用量角器在非角度页面中发送键时,它显示错误“无Such元素错误:没有这样的元素” NoSuchElementError:没有这样的元素(会话信息:chrome=47.0.2526.80)(驱动程序信息:chrome Driver = 2 . 14 . 313457(3d 645 C 400 ed F2 e 2c 500566 c9aa 096063 e 707 C 9 cf),platf

  • 我正在尝试单击页面上的“新车辆搜索”,但在我看来,我有错误的Web元素定位器(XPath或CSS)。我尝试了所有可能的选项(CSS,XPath..),但没有成功,我得到了一个错误: 块报价 [错误]NoSuchElementException:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“/html/body/div[5]/div/div[4]/div1

  • 我正在编写一个程序,它接受来自文件的输入,并打印城市及其降雨量的列表。我在确定阵列长度和城市降雨量数据的扫描仪上遇到了麻烦。 我一直得到这个例外 在java.util.scanner.throwfor(scanner.java:909)在java.util.scanner.next(scanner.java:1530)在java.util.scanner.nextInt(scanner.java: