'Exception in thread "main" java.util.NoSuchElementException: No line found' 当遍历循环读取文件时
'Exception in thread "main" java.util.NoSuchElementException: No line found' When iterating through a loop reading a file
Java 菜鸟在这里。所以我正在编写一个程序,从文本文件中读取数据,并将数据存储到一个对象数组中。循环的每次迭代读取 4 条数据(一个名称(字符串)和 3 个对应的数字(双精度数))。然后它创建一个调用构造函数的对象,并将一个对象存储在数组的每个元素中。有 10 个单独的项目,因此文本文件中有 40 行。
出于某种原因,我的循环正确地读取了前 9 项(或 36 行),但它不会读取最后 4 行。我在循环中写了一个 print 语句来查看发生了什么,这就是它的样子。我还尝试了 for 循环和 while 循环。这是我正在写的方法:
public static PlanetData[] readFile() throws IOException
{
String name;
double radius, flux, distance;
final int ARRAY_SIZE = 10;
PlanetData[] planArray = new PlanetData[ARRAY_SIZE];
File planetFile = new File("PlanetData.txt");
Scanner planetFileInput = new Scanner(planetFile);
int index = 0;
while(planetFileInput.hasNext() && index < planArray.length)
{
name = planetFileInput.nextLine();
radius = planetFileInput.nextDouble();
flux = planetFileInput.nextDouble();
distance = planetFileInput.nextDouble();
planetFileInput.nextLine();
System.out.println(index + ": " + name + " " + radius + " " + flux + " " + distance);
planArray[index] = new PlanetData(name, radius, flux, distance);
index++;
}
return planArray;
我收到以下错误:
0: Proxima Cen b, 1.1, 0.66, 4.2
1: Kapteyn b*, 1.6, 0.43, 13.0
2: GJ 667 C c, 1.5, 0.88, 22.0
3: GJ 667 C f*, 1.4, 0.56, 22.0
4: TRAPPIST-1 e, 0.9, 0.65, 39.0
5: TRAPPIST-1 f, 1.0, 0.38, 39.0
6: LHS 1140 b, 1.4, 0.41, 41.0
7: Kepler-1229 b, 1.4, 0.49, 769.0
8: Kepler-442 b, 1.3, 0.7, 1115.0
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at PlanetClient.readFile(PlanetClient.java:57)
at PlanetClient.main(PlanetClient.java:13)
编辑:这是文本文件中的数据:
Proxima Cen b
1.1
0.66
4.2
Kapteyn b*
1.6
0.43
13
GJ 667 C c
1.5
0.88
22
GJ 667 C f*
1.4
0.56
22
TRAPPIST-1 e
0.9
0.65
39
TRAPPIST-1 f
1
0.38
39
LHS 1140 b
1.4
0.41
41
Kepler-1229 b
1.4
0.49
769
Kepler-442 b
1.3
0.7
1115
Kepler-62 f
1.4
0.39
1200
第 8 个条目是您 PlanetData.txt 中的最后一个条目吗?看起来您在设置第一个条目的名称时正在调用下一行,然后在条件的末尾再次调用。似乎这会导致您的代码跳过所有其他条目,然后尝试读取最后一行之后的行。你能 post PlanetData.txt 中的数据吗?谢谢
您正在阅读包含 'planetFileInput.nextLine()' 的一行两次,并且没有对第二次结果做任何事情。
删除第二次出现。
通常,您应该对每个 hasNext() 调用都有一个 nextLine() 调用。
Java 菜鸟在这里。所以我正在编写一个程序,从文本文件中读取数据,并将数据存储到一个对象数组中。循环的每次迭代读取 4 条数据(一个名称(字符串)和 3 个对应的数字(双精度数))。然后它创建一个调用构造函数的对象,并将一个对象存储在数组的每个元素中。有 10 个单独的项目,因此文本文件中有 40 行。
出于某种原因,我的循环正确地读取了前 9 项(或 36 行),但它不会读取最后 4 行。我在循环中写了一个 print 语句来查看发生了什么,这就是它的样子。我还尝试了 for 循环和 while 循环。这是我正在写的方法:
public static PlanetData[] readFile() throws IOException
{
String name;
double radius, flux, distance;
final int ARRAY_SIZE = 10;
PlanetData[] planArray = new PlanetData[ARRAY_SIZE];
File planetFile = new File("PlanetData.txt");
Scanner planetFileInput = new Scanner(planetFile);
int index = 0;
while(planetFileInput.hasNext() && index < planArray.length)
{
name = planetFileInput.nextLine();
radius = planetFileInput.nextDouble();
flux = planetFileInput.nextDouble();
distance = planetFileInput.nextDouble();
planetFileInput.nextLine();
System.out.println(index + ": " + name + " " + radius + " " + flux + " " + distance);
planArray[index] = new PlanetData(name, radius, flux, distance);
index++;
}
return planArray;
我收到以下错误:
0: Proxima Cen b, 1.1, 0.66, 4.2
1: Kapteyn b*, 1.6, 0.43, 13.0
2: GJ 667 C c, 1.5, 0.88, 22.0
3: GJ 667 C f*, 1.4, 0.56, 22.0
4: TRAPPIST-1 e, 0.9, 0.65, 39.0
5: TRAPPIST-1 f, 1.0, 0.38, 39.0
6: LHS 1140 b, 1.4, 0.41, 41.0
7: Kepler-1229 b, 1.4, 0.49, 769.0
8: Kepler-442 b, 1.3, 0.7, 1115.0
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at PlanetClient.readFile(PlanetClient.java:57)
at PlanetClient.main(PlanetClient.java:13)
编辑:这是文本文件中的数据:
Proxima Cen b
1.1
0.66
4.2
Kapteyn b*
1.6
0.43
13
GJ 667 C c
1.5
0.88
22
GJ 667 C f*
1.4
0.56
22
TRAPPIST-1 e
0.9
0.65
39
TRAPPIST-1 f
1
0.38
39
LHS 1140 b
1.4
0.41
41
Kepler-1229 b
1.4
0.49
769
Kepler-442 b
1.3
0.7
1115
Kepler-62 f
1.4
0.39
1200
第 8 个条目是您 PlanetData.txt 中的最后一个条目吗?看起来您在设置第一个条目的名称时正在调用下一行,然后在条件的末尾再次调用。似乎这会导致您的代码跳过所有其他条目,然后尝试读取最后一行之后的行。你能 post PlanetData.txt 中的数据吗?谢谢
您正在阅读包含 'planetFileInput.nextLine()' 的一行两次,并且没有对第二次结果做任何事情。 删除第二次出现。
通常,您应该对每个 hasNext() 调用都有一个 nextLine() 调用。