Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';“线程中的异常”;“主要”;java.util.NoSuchElementException:未找到任何行';在循环中迭代读取文件时_Java_Arrays_Java.util.scanner_Nosuchelementexception - Fatal编程技术网

';“线程中的异常”;“主要”;java.util.NoSuchElementException:未找到任何行';在循环中迭代读取文件时

';“线程中的异常”;“主要”;java.util.NoSuchElementException:未找到任何行';在循环中迭代读取文件时,java,arrays,java.util.scanner,nosuchelementexception,Java,Arrays,Java.util.scanner,Nosuchelementexception,这里是爪哇岛。所以我正在编写一个程序,从文本文件中读取数据,并将数据存储到一个对象数组中。循环的每次迭代读取4条数据(一个名称(字符串)和3个相应的数字(双精度))。然后,它创建一个调用构造函数的对象,并在数组的每个元素中存储一个对象。有10个单独的项目,因此文本文件中有40行 出于某种原因,我的循环正确地读取了前9项(或36行),但不会读取最后4行。我在循环中写了一个print语句,看看发生了什么,这就是它的样子。我还尝试了for循环和while循环。以下是我正在写的方法: publi

这里是爪哇岛。所以我正在编写一个程序,从文本文件中读取数据,并将数据存储到一个对象数组中。循环的每次迭代读取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;
编辑:以下是文本文件中的数据:

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

第八个条目是PlanetData.txt中的最后一个条目吗?在设置第一个条目的名称时,您似乎在调用下一行,然后在条件的末尾再次调用。这似乎会导致代码跳过其他每一个条目,然后尝试在最后一个条目之后读取该行。你能在PlanetData.txt中发布数据吗?谢谢

您正在两次阅读带有“planetFileInput.nextLine()”的行,而没有对第二次结果进行任何操作。 删除第二个引用


通常,每次hasNext()调用都有一个nextLine()调用。

可能是文件中的最后一行没有以换行符结尾。这并不完全正确。第三个double后面有一个换行符,
nextLine()
使用该换行符。如果OP删除了它,那么下一个
nextLine()
将使用这个空字符串,而不是下一个行星名称。最后一行可能没有任何东西-甚至没有新行-在最后一行之后。谢谢你的回复!你能解释一下你读两遍是什么意思吗?在所有的double之后都有“planetFileInput.nextLine()”,但是您提到的第二个匹配项在哪里?抱歉,就像我说的,我是java的高手。另外,当我删除该nextLine()调用时,它只读取前4个条目,并且出现不匹配错误。感谢您的帮助!因此,第8项(或第9项)是文本文件中倒数第二项。代码没有读取的文本文件中还有4行(即一个项目/对象)。您能解释一下“设置第一个条目的名称时,您正在调用下一行”是什么意思吗?对不起,我对java还是很在行。我也会尝试用全文文件编辑原始帖子,对此我很抱歉!再次感谢,当然,当执行行“name=planetFileInput.nextLine();”时,它会使您的扫描仪直接转到下一行。然后读入不同的值并再次调用“planetFileInput.nextLine();”,这会使扫描仪对象再次转到下一行。这会导致每次迭代都跳过一行,因此,在最后您会尝试读取一行不存在的内容。理论上,你可以在文本文件中增加一行,这个错误就会消失。。。但是你的行星数据的完整性仍然会有一个大问题。哦,哇,所以在文本文件末尾添加一行新行就解决了这个问题!我不知道名称分配导致它转到下一行,但这是有意义的。所以有了额外的一行,一切都正常,所有的数据都是正确的。但是有没有办法不用编辑文本文件就解决这个问题呢?从理论上讲,我不想打开或编辑它,但如果不这样做,我想不出如何正确地阅读所有内容。再次感谢您的帮助!这实际上取决于数据的存储方式。根据您的描述,您有跨线相关的值。如果所有返回的数据都是正确的,那么您可以考虑在调用“PrimeFielePosith.NestLoad()”之前添加“IF(.PrimeFielePosith.HasnExtRead()){ Sturn}”;“嗨,如果这对您有帮助,请您选择它作为答案吗?”谢谢:)
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