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
的额外调用是处理第三个双精度后的尾随换行符;忽略它实际上是不正确的。