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);
}
}
}
此代码抛出以下错误:
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)
错误的最后一行指向第22行,即以下行:
height = fileReader.nextInt();
据我所知,没有理由输入不匹配错误。有什么建议?我在下面发布了有问题的文件(patients.txt)。
Tom Atto
6
3
Eaton Wright
5
5
Cary Oki
5
11
答案 0 :(得分:1)
原因是您的name
作业。您执行以下操作:
name = fileReader.next();
事实是next
默认返回由空格分隔的下一个标记。根据{{3}}:
public String next()
查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。
因此,您现在可以看到名字和姓氏可能有问题。例如,如果你在文件中有这个:
John Smith
你做了:
scanner.next();
您将只获得John
,因为它是下一个完整的令牌,并在该空间分隔。这意味着当你扫描整数时:
scanner.nextInt();
扫描程序将遇到Smith
(字符串)并抛出InputMismatchException
。使用:
name = fileReader.nextLine();
接收整行。这将产生John Smith
。详细了解Javadocs。