2013-06-19 1 views
2

В настоящее время я пытаюсь прочитать файл с моего жесткого диска. Имя файла - «Sample.txt», ниже - мой код. Я могу получить его для компиляции и запуска, но получаю эту ошибку:java.util.InputMismatchException Ошибка вывода

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:909) 
at java.util.Scanner.next(Scanner.java:1530) 
at java.util.Scanner.nextDouble(Scanner.java:2456) 
at Proj1GradesService.errorReport(Proj1GradesService.java:42) 
at Proj1GradesClient.main(Proj1GradesClient.java:13) 

Я попытался чтения файла ж/всего цикла While и теперь с TRY/улова, но получил ту же ошибку , и я не уверен, что с ним не так. Я пытаюсь прочитать файл из класса службы и получить вызов метода errorReport() из класса Client. Любая помощь будет принята с благодарностью.

import java.util.*; //allows use of Scanner class 
import java.io.*; //for File and IOException classes 

class Proj1GradesService 
{ //begin Proj1GradesService 

    public void pageAndColHeading(char letter) //accepts char as a parameter 
    { //start pageAndColHeading 
    switch (letter) 
    { //start switch 
     case 'e': //write the caption for error report 
      System.out.println ("Error Report - Students With Invalid GPA"); //prints Error Report 
      break; 

     case 'v': //write the caption for valid report 
      System.out.println ("Valid Report - Students With Valid"); //prints Valid Report 
      break; 
     default: ; //do nothing 
    }//end switch 
    } //end pageAndColHeading 

    public void errorReport() throws IOException 
    { //start errorReport 

    Scanner scanFile = null; 
    try 
    { 
     scanFile = new Scanner (new File ("p1SampleGPAData.txt")); 
    } 
     catch (FileNotFoundException fnfe) 
     { 
      System.out.println ("wrong file name."); 
     } 

    String name; //name read from file 
    double gpa; //gpa read from file 
    int count = 0; //line # 

    while (scanFile.hasNext()) 
    { 
     name = scanFile.next(); 
     gpa = scanFile.nextDouble(); 
     System.out.println ("Line Number: " + count + "Name: " + name + "GPA: " + gpa); 

     ++count; 
    } //end while 
    scanFile.close(); 

    } //end errorReport 


} //end class 
+0

Не могли бы вы предоставить образец текстового файла, чтобы мы могли видеть, какой формат вы пытаетесь разобрать? –

ответ

1

Учитывая вашу структуру файла, ниже которого предполагается печатать заявление

name1 1.1 
    name2 2.2 
    name3 3.3 

Теперь в соответствии с вашим кодом следующие строки

// consume your whole line. ie name1 1.1 
name = scanFile.next(); 
// looking for double but instead getting string ie name2 
// hence throwing InputMismatchException 
gpa = scanFile.nextDouble(); 

Теперь для решения выше проблемы. Вы можете использовать String.split().

// collect whole line 
    name = scanFile.next(); 

    // split by one or more whitespace OR use your delimiter 
    String[] str = name.split("\\s+"); 

    // gives name 
    String actName = str[0]; 

    // gives gpa, throws NumberFormatException if str[1] is not double value 
    double gpa = Double.parseDouble(str[1]); 

Надеюсь, это поможет. Если вам нужна помощь, просто спросите.

+0

Благодарим вас за помощь. Я изменил код. Я также не понимал, что в файле было 2 строки и 1 double для чтения, firstName, lastName и gpa. Поэтому часть ошибки несоответствия исходила от попытки прочитать lastName как double, поэтому я также исправил эту часть. –

0

Вообще, InputMismatchException отбрасывается, если вещь вы пытаетесь разобрать не соответствует формату, который Scanner предпологает.

В этом случае проверьте свой входной файл, чтобы увидеть, действительно ли элемент, который вы разыгрываете, double. Будьте осторожны с любыми лишними пробелами.

0

Это, скорее всего, проблема с вашими данными, которые не соответствуют тому, что ожидает ваша программа. Вам нужно перепроверить свою файловую структуру.

Как показано в stacktrace nextDouble, проблема заключается в недвойственности в файле, где scanner выдает двойной.

0

Не зная, как выглядит ваш входной файл, эта ошибка происходит из-за того, что вы пытаетесь прочитать символьные данные в double, а те символы, которые читаются, не удваиваются.

Убедитесь, что все данные, которые вы читаете, находятся в том формате, в котором вы ожидаете.

Если бы это был я, я бы прочитал все данные в строку, а затем попытался преобразовать эти строки в парные, поэтому я мог бы окружить этот оператор в try/catch, а затем обработать его соответствующим образом.

Смежные вопросы