2013-10-18 69 views
0

我正在創建一個使用2個類的程序。在一個類中,我創建了第二類然後調用的方法。所有方法都包含在第一個類中,而第二個類只是簡單地調用它們並執行代碼。從.txt文件掃描時出現java.util.InputMismatchException錯誤

1級

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


public class Student { 


    private Scanner scanner; 
    private String firstName; 
    private String lastName; 
    private int homeworkScore; 
    private int testScore; 
    private String letterGrade; 
    private int numberOfStudents; 

    public Student() { 

     String firstName = null; 
     String lastName = null; 
     int homeworkScore = 0; 
     int testScore = 0; 
     String letterGrade = null; 
     int numberOfStudents = 0; 
    } 


    public void openFile(){ 
     try { 
      scanner = new Scanner(new File("grades.txt")); 
     } catch (FileNotFoundException e) { 
      System.out.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class"); 
      System.exit(0); 
     } 
    } 


    public void setNumberOfStudents() { 
     System.out.println("It kinda works"); 
     numberOfStudents = scanner.nextInt(); 
    } 

public void setFastName() { 
     fastName = scanner.next(); 
    } 

public void setLastName() { 
     lastName = scanner.next(); 
    } 

public void setHomeworkScore() { 

     int subAssignment = 0; 
     int assignment = 0; 

     for(int i = 1; i <= 21; i++) { 
      subAssignment = scanner.nextInt(); 
      assignment += subAssignment; 
     } 

     homeworkScore = assignment; 
    } 

2級

import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.util.Scanner; 


public class CourseGrade { 

public static void main(String[] args) { 

    Student myStudent = new Student(); 

    myStudent.openFile(); 

    myStudent.setNumberOfStudents(); 

    myStudent.setFirstName(); 

    myStudent.setLastName(); 

    myStudent.setHomeworkScore(); 


} 

} 

這是我的錯誤:

It kinda works 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at Student.setHomeworkScore(Student.java:54) 
at CourseGrade.main(CourseGrade.java:20) 

...在 「它還挺作品」 聲明只是看如果它正確地調用方法,它看起來是這樣。

據我的理解,錯誤告訴我,它正在從.txt文件中讀取錯誤的類型,但是idk爲什麼會這樣。它甚至正確讀取文件?任何類型的幫助都會很棒,因爲我一直在盯着這個代碼幾個小時!

+0

文件的格式是什麼?我至少有一個猜測。 –

+0

沒有看到輸入數據,就不可能弄清楚......但顯然它不像預期的那樣是'int'。 –

回答

0

基於錯誤信息,並在錯誤發生時,最有可能的您正在嘗試讀取整數,但您正在閱讀的實際數據不是數字。

您可以通過將scanner.nextInt()更改爲scanner.next()並打印出您實際獲得的值來驗證此情況。或者,您可以添加表單的「錯誤處理」:

for(int i = 1; i <= 21; i++) { 
     if (scanner.hasNextInt() 
      subAssignment = scanner.nextInt(); 
     else 
      throw new RuntimeException("Unexpected token, wanted a number, but got: " + scanner.next()); 
     assignment += subAssignment; 
    } 
+0

謝謝! scanner.hasNext()和scanner.hasNextInt()似乎正在爲它工作。現在我有這個工作,我將開始完成編程。希望其餘的也可以正常工作。非常感謝! –

0

根據oracle java文檔,拋出異常,when the token doesn't fit the requested pattern (int) or is out of range

如果文件中沒有更多的int,則會引發該異常。
您可以通過檢查是否存在另一個用掃描儀方法hasNextInt讀取的int值來避免該異常。

例如:

for(int i = 1; i <= 21 && scanner.hasNextInt(); i++) { 
      subAssignment = scanner.nextInt(); 
      assignment += subAssignment; 
} 

(如果不解決您的問題,您應該還包括輸入文件)

+0

謝謝你的回答!你也是對的,而且顯然對java很好。謝謝! –

相關問題