Java 为什么它会给我一个NoTouchElementException错误

Java 为什么它会给我一个NoTouchElementException错误,java,nosuchelementexception,Java,Nosuchelementexception,该程序可以编译,但它给我一个错误,如下所示: 线程主java.util.NoSuchElementException中出现异常:未找到任何行 指向该行=input.nextLine;行,我不明白为什么。问题是,在while循环中,您耗尽了Scannerobjects,因此其中没有行 稍后,当您在for循环中调用nextLine时,它显然会抛出一个异常,因为您已经对行进行了迭代 我的建议是使用列表和pojo: public static void getBooks()throws FileNotF

该程序可以编译,但它给我一个错误,如下所示: 线程主java.util.NoSuchElementException中出现异常:未找到任何行
指向该行=input.nextLine;行,我不明白为什么。

问题是,在while循环中,您耗尽了Scannerobjects,因此其中没有行

稍后,当您在for循环中调用nextLine时,它显然会抛出一个异常,因为您已经对行进行了迭代

我的建议是使用列表和pojo:

public static void getBooks()throws FileNotFoundException{

  Scanner input = new Scanner(bookFile);
  String line = input.nextLine();
  bookNum = 1;

  while (input.hasNextLine()) {
     bookNum += 1;
     line = input.nextLine();
  }

  bookarray = new String[3][bookNum];

  for (int y = 0; y < bookNum; y++){
     bookarray [0][y] = line.substring(0,10);
     bookarray [1][y] = line.substring(11,15);
     bookarray [2][y] = line.substring(17,18);
     line = input.nextLine();
  }     
}
其中MyBookPojo可以包含从每行提取的3个字符串


因此,通过这种方式,您可以向列表中添加任意数量的对象。

它会给您一个例外,因为在某些情况下,不存在下一行。您的扫描仪没有更多的行可读取,因为您已经在第一个while循环中读取了,请参见whileinput。hasNextLine@ZouZou我如何修复它,然后我尝试放置input.nextLine;而不是line=input.nextLine;但它仍然不起作用。@user3424068这不会改变任何东西。您可以关闭扫描仪,然后在while循环后重新打开它。在while之后,输入.close;输入=新的ScannerbookFile@邹祖:谢谢你的工作
List<MyBookPojo> bookPojos = new ArrayList<MyBookPojo>();