【问题标题】:How to fix java.util.InputMismatchException for my scanner file reader?如何为我的扫描仪文件阅读器修复 java.util.InputMismatchException?
【发布时间】:2019-04-28 16:42:14
【问题描述】:

我在使用扫描仪的文件阅读器时遇到了一些问题,此时我有点不知所措。尝试使用扫描仪读取文件,但 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 ++;
    }
}

这应该从每行都包含字符串和双精度的列表中获取以空格分隔的每个条目,并将其保存到适当的数组中。然而,它只在第一行达到第一个双倍。尝试读取下一个 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

【问题讨论】:

  • 您能分享一些您正在阅读的文件中的示例输入吗?
  • 完成,添加了我正在使用的列表的数据。
  • 题外话,但为什么您的数组需要多个索引变量?
  • 老实说,因为我不知道更好的方法。我需要单独分隔名称和双重值,以便我可以以与团队名册一致的格式打印它们。

标签: java arrays file java.util.scanner


【解决方案1】:

尝试注释掉为 Scanner 实例指定分隔符的行 scanner.useDelimiter(" ");

并确保您的 Scanner 实例在解析双精度时使用正确的语言环境(. 分隔符而不是 ,)。

Scanner scanner = new Scanner(new File(file).useLocale(Locale.US);

【讨论】:

  • 这似乎奏效了。它将所有名称和双打记录到其相应的数组中。我也遇到了 java.util.NoSuchElementException 的问题,但很容易通过从scanner.hasnextline 中删除“line”来解决。感谢您的帮助。
猜你喜欢
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2013-11-05
相关资源
最近更新 更多