我正在为我的类(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/