Java 输入不匹配异常当尝试使用扫描仪时,我遗漏了什么?

Java 输入不匹配异常当尝试使用扫描仪时,我遗漏了什么?,java,java.util.scanner,Java,Java.util.scanner,此代码引发以下错误: package baker; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class FileReader { public static void main(String[] args) throws FileNotFoundException { String name;

此代码引发以下错误:

package baker;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class FileReader {

    public static void main(String[] args) throws FileNotFoundException {
        String name;
        double height;
        double inches;
        double idealWeight;

        Scanner fileReader;
        fileReader = new Scanner(new FileInputStream("Data/patients.txt"));
        while (fileReader.hasNext()) {

            name = fileReader.next(); 
            System.out.println("Name: ");
            height = fileReader.nextInt();
            inches = fileReader.nextInt(); 

            fileReader.nextLine();
            idealWeight = 110 + (height - 5) * 5 + inches * 5;
            System.out.println("Ideal Weight: " + idealWeight);


    }  
  }
}
错误的最后一行指向第22行,即下一行:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at baker.FileReader.main(FileReader.java:22)
C:\Users\SFU\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
据我所知,没有理由出现输入不匹配错误。有什么建议吗?我已经在下面发布了有问题的文件(patients.txt)


原因是您的
姓名
分配。您可以执行以下操作:

Tom Atto
6
3
Eaton Wright
5
5
Cary Oki
5
11
事实是
next
返回默认情况下由空格分隔的下一个标记。根据:

publicstringnext()

查找并返回此扫描程序中的下一个完整令牌。完整标记的前面和后面是与分隔符模式匹配的输入

因此,您现在可以看到,名字和姓氏可能有问题。例如,如果文件中有此项:

name = fileReader.next();
你做到了:

John Smith
您将只获得
John
,因为它是下一个完整的标记,并在空格处分隔。这意味着,当您扫描整数时:

scanner.next();
扫描仪将遇到
Smith
(一个字符串)并抛出
输入不匹配异常。使用:

scanner.nextInt();

而是接收整条线路。这将产生
约翰·史密斯
。了解更多信息。

它与FileInputStream没有任何关系。它与输入数据有关。
scanner.nextInt();
name = fileReader.nextLine();