使用扫描仪的文件阅读器遇到一些问题,这时我有些茫然。尝试使用扫描仪读取文件,但atm仍然显示java.util.InputMismatchException
消息,提示我的scanner.next
将错误的文件放入了错误的数组中?我不知道为什么会这样,如果有人可以在我的代码中指出我搞砸的地方,我将不胜感激。
注意:除非相关,否则请忽略无用的变量和过长的数组。我正准备将其放入类中,并且尚未使用某些变量。
public static void main(String[] args) throws IOException
{
int playersTotal = 0;
int entries = 0;
int namesIndex = 0;
int attackIndex = 0;
int blockIndex = 0;
String[] playersName = new String[60];
double[] attackScores = new double[60];
double[] blockScores = new double[60];
String file = "roster1.txt";
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(" ");
while(scanner.hasNextLine())
{
playersName[namesIndex] = scanner.next();
System.out.println(playersName[namesIndex]);
namesIndex ++;
playersName[namesIndex] = scanner.next();
System.out.println(playersName[namesIndex]);
namesIndex ++;
entries ++;
attackScores[attackIndex] = scanner.nextDouble();
System.out.println(attackScores[attackIndex]);
attackIndex ++;
entries ++;
//problem occurs here:
blockScores[blockIndex] = scanner.nextDouble();
System.out.println(blockScores[blockIndex]);
blockIndex ++;
entries ++;
playersTotal ++;
}
}
这应该从列表中的每个条目中用空格隔开,每行上都包含Strings和double,并将其保存到适当的数组中。但是,它只会达到第一行的第一双。尝试读取下一个双精度字会在线程中提示异常。
程序输出:
Rachael
Adams
3.36
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.nextDouble(Scanner.java:2413)
at VerdeVolleyball.main(VerdeVolleyball.java:37)
list I'm using:
1. Rachael Adams 3.36 1.93
2. Kim Hill 1.53 1.76
3. Tori Dixon 0.92 1.62
4. Alisha Glass 1.96 1.55
5. Cursty Jackson 0.69 1.44
6. Michelle Bartsch 0.28 1.42
7. Alexis Crimes 3.89 1.34
8. Foluke Akinradewo 4.81 1.14
9. Courtney Thompson 0.59 0.93
10. Krista Vansant 2.78 0.86
11. Nicole Fawcett 4.01 0.61
12. Kelly Murphy 1.15 0.58
13. Natalie Hagglund 2.49 0.52
14. Kayla Banwarth 2.98 0.5
15. Lauren Gibbemeyer 2.25 0.5
答案 0 :(得分:0)
尝试注释掉为Scanner实例指定分隔符的行
scanner.useDelimiter(" ");
,并且在解析双精度(.
分隔符而不是,
时,请确保您的Scanner实例使用正确的语言环境。
Scanner scanner = new Scanner(new File(file).useLocale(Locale.US);