java - 基本文件扫描仪异常/问题

标签 java exception java.util.scanner

我正在为我的类(class)开发一个程序,要求我从 txt 文件中读取数据,然后将其显示回来。我创建了一个读取 hasNext 的 while 循环,但遇到了异常。它说这是“没有这样的元素异常(exception)”,我不知道为什么。该循环运行 5 次迭代,然后给出异常

import java.util.Scanner;
import java.text.DecimalFormat;
import java.io.*;

public class Project2_William_Walker
{
    public static void main (String[]args) throws IOException
    {
      File file = new File ("boarding.txt");
      Scanner inputFile = new Scanner(file);
      DecimalFormat df = new DecimalFormat("0.00");

      String title = "Madison Kennel & Grooming";   
      String fName;
      String lName;
      String breed;
      String weight;
      String age;
      double highRisk = 20.00;




      while (inputFile.hasNext())
      {
         fName = inputFile.nextLine();
         lName = inputFile.nextLine();
         breed = inputFile.nextLine();
         weight = inputFile.nextLine();
         age = inputFile.nextLine();

         inputFile.nextLine();

         System.out.println(fName + " " + lName + " " + breed + " " + weight + " " + age);
         System.out.println();



      }
      inputFile.close();    

      System.out.println("End of Program");

   }
}

因此,在我的 txt 文件中,我有一个列表,其中包含名字、姓氏、品种、体重和年龄。看起来像这样:

Will  
Walker  
Pug  
3  
4  

John  
Appleseed  
Retriever  
15  
7  

..依此类推还有 4 个条目。我的循环很好地完成了前 5 次,但在第 6 次也是最后一次就失败了。感谢您的帮助!

最佳答案

您正在循环中读取 6 行,但循环条件仅检查是否有(至少)1 行要读取。

输入文件末尾可能有一个额外的空行,这会导致 hasNext() 在读取最后一个数据 block 后返回 true

您最好使用 for 循环迭代 5 次,每次检查是否有可用的行,并将数据保存到数组中。

类似于:

String[] data = new String[5];

while (inputFile.hasNext()) {
    Arrays.fill(data, null); // clear out array, in case input is short
    for (int i = 0; i < 5 && inputFile.hasNext(); i++)
        data[i] = inputFile.nextLine();

    if (inputFile.hasNext())
        inputFile.nextLine();

    System.out.println(data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " + data[4]);
    System.out.println();
}
inputFile.close();    

关于java - 基本文件扫描仪异常/问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336408/

相关文章:

java - Android开发者文档IntentService : Are we defining the same class twice?

c++ - 0xC0000005 : Access violation reading location 0x0000000000000008

Java Scanner hasNext() 跳过空行

扫描仪对象的 Java 'cannot find symbol'

Java 模块化,使用 gradle 的 java9-modularity 插件的测试类中的编译问题

java - 注册后使用 Firebase 电话号码登录

c# - 'NameSpace.Settings' 的类型初始值设定项抛出异常

entity-framework - Entity Framework (v6)在异常后关闭连接而不使用 using 语句?里面的实验结果

Java Scanner - 下一个 String 直到 |被发现

java - 为什么我的代码会导致编译器错误?