Как исправить исключение java.util.InputMismatchException для сканера файлов моего сканера? - PullRequest
1 голос
/ 28 апреля 2019

У меня возникли некоторые проблемы с моей программой для чтения файлов, которая использует сканер, и сейчас я немного растерялся. Пытаюсь прочитать файл со сканера, но я получаю сообщение 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

1 Ответ

0 голосов
/ 28 апреля 2019

Попробуйте закомментировать строку, в которой вы указываете разделитель для экземпляра сканера scanner.useDelimiter(" ");

и убедитесь, что ваш экземпляр Scanner использует правильный языковой стандарт при разрешении двойного (. разделитель вместо ,).

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