Java 扫描仪在输入文件的最末端出现故障
我有以下代码:Java 扫描仪在输入文件的最末端出现故障,java,java.util.scanner,Java,Java.util.scanner,我有以下代码: Scanner in = new Scanner(new FileReader("in.txt")); while(in.hasNext()){ System.out.println(in.nextLine()); System.out.println(in.nextLine()); System.out.println(in.nextDouble()); System.out.println(in
Scanner in = new Scanner(new FileReader("in.txt"));
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextLine());
}
其中in.txt的格式为:
One Name
Second Name
double
double
double
One Name
Second Name
double
double
double
...
但是,while循环在输入文件的最后一行失败。它会打印整个输入文件,但完成后会出现一个错误,显示:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at start.Start.main(Start.java:22)
Java Result: 1
每次读取前都必须调用hasNext()
方法,因为如果为true,此方法可以保证至少还有一个元素要读取。您的阅读应该如下所示:
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextLine());
每次读取前都必须调用hasNext()
方法,因为如果为true,此方法可以保证至少还有一个元素要读取。您的阅读应该如下所示:
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextLine());
每次读取前都必须调用hasNext()
方法,因为如果为true,此方法可以保证至少还有一个元素要读取。您的阅读应该如下所示:
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextLine());
每次读取前都必须调用hasNext()
方法,因为如果为true,此方法可以保证至少还有一个元素要读取。您的阅读应该如下所示:
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextLine());
根据您的输入文件,模式为:
One Name
Second Name
double
double
double
因此,while循环必须与此模式匹配,才能将文件作为
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
}
为了更好地处理异常情况,在阅读@rendon建议的每一行之前,应该使用适当的hasNextXXX()方法
希望这有帮助。根据您的输入文件,模式是:
One Name
Second Name
double
double
double
因此,while循环必须与此模式匹配,才能将文件作为
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
}
为了更好地处理异常情况,在阅读@rendon建议的每一行之前,应该使用适当的hasNextXXX()方法
希望这有帮助。根据您的输入文件,模式是:
One Name
Second Name
double
double
double
因此,while循环必须与此模式匹配,才能将文件作为
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
}
为了更好地处理异常情况,在阅读@rendon建议的每一行之前,应该使用适当的hasNextXXX()方法
希望这有帮助。根据您的输入文件,模式是:
One Name
Second Name
double
double
double
因此,while循环必须与此模式匹配,才能将文件作为
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
}
为了更好地处理异常情况,在阅读@rendon建议的每一行之前,应该使用适当的hasNextXXX()方法
希望这有帮助。按如下方式重写代码,它将打印所有值
while(in.hasNext()){
System.out.println(in.nextLine());
}
按如下方式重写代码,它将打印所有值
while(in.hasNext()){
System.out.println(in.nextLine());
}
按如下方式重写代码,它将打印所有值
while(in.hasNext()){
System.out.println(in.nextLine());
}
按如下方式重写代码,它将打印所有值
while(in.hasNext()){
System.out.println(in.nextLine());
}
OP对
nextLine
的额外调用是处理第三个double之后的尾随换行符;忽略它实际上是不正确的。OP对nextLine
的额外调用是处理第三个双精度后的尾随换行符;忽略它实际上是不正确的。OP对nextLine
的额外调用是处理第三个双精度后的尾随换行符;忽略它实际上是不正确的。OP对nextLine
的额外调用是处理第三个双精度后的尾随换行符;忽略它实际上是不正确的。