2017-05-09 54 views
0

我不斷收到一個名爲「java.util.Mismatchexpection:null」的錯誤。我不知道如何解決這個問題。它指向grade = fileInput.nextInt();一行。如何解決Java中的不匹配異常?

下面是我使用的類:

import java.util.Scanner; 

import java.io.*; 

public class Students 
{ 
    public static void printAllStudents(Student[] students){ 
     for(int i=0;i<students.length;i++) 
     { 
      System.out.println(students[i]); 
     } 
    } 

    public static void printAllStudentsByFirstName(Student[] students,String firstName){ 
     String name=firstName.split(" ")[1]; 
     int len=name.length(); 
     for (int i=0;i<students.length;i++){ 
      try{ 
       if(students[i].getFname().substring(0, len).equalsIgnoreCase(name)){ 
        System.out.println(students[i]); 
       } 
      } 
      catch (Exception e) { 
       // TODO: handle exception 
      } 
     } 
    } 

    public static void printAllStudentsByLastName(Student[] students,String lastName){ 
     String name=lastName.split(" ")[1]; 

     int len = name.length(); 

     for(int i=0;i<students.length;i++){ 
      try{ 
       if(students[i].getLname().substring(0, len).equalsIgnoreCase(name)){ 
        System.out.println(students[i]); 
       } 
      } 
      catch (Exception e) { 
       // TODO: handle exception 
      } 
     } 
    } 

    public static void printAllStudentsByGrades(Student[] students,String interval){ 
     int start=Integer.parseInt(interval.split(" ")[1]); 
     int end=Integer.parseInt(interval.split(" ")[2]); 
     for(int i=0;i<students.length;i++){ 
      if(students[i].getGrade()>=start && students[i].getGrade()<=end){ 
       System.out.println(students[i]); 
      } 
     } 
    } 

    public static void sort(Student[] students) 
    { 
     int n = students.length; 
     int k; 
     for (int m = n; m >= 0; m--) { 
      for (int i = 0; i < n - 1; i++) { 
       k = i + 1; 
       if (students[i].getGrade() > students[k].getGrade()) 
       { 
        Student temp=new Student(); 
        temp = students[k]; 
        students[k]=students[i]; 
        students[i]=temp; 
       } 
      } 
     } 
     printAllStudents(students); 
    } 

    public static void main (String[] args) throws IOException 
    { 
     String first_name, last_name, line = ""; 
     int grade, lines = 0, i; 
     char ch; 
     Scanner sc = new Scanner(System.in); 
     Scanner fileInput = new Scanner(new File("students.txt")); 
     //Counting the number of lines in the file. 
     while (fileInput.hasNext()) 
     { 
      line = fileInput.next(); 
      lines++;} 

     fileInput = new Scanner(new File("students.txt")); 
     //Declaring Student array of size lines. 
     Student[] students=new Student[lines]; 
     i = 0; 

     while (fileInput.hasNext()) 
     { 
      first_name = fileInput.nextLine(); 
      last_name = fileInput.nextLine(); 
      grade = fileInput.nextInt(); 

      Student st = new Student(first_name, last_name, grade); 
      students[i++] = st; 
     } 

     System.out.println("Please choose from below operations: "); 
     System.out.println("1. printall"); 
     System.out.println("2. firstname <name>"); 
     System.out.println("3. lastname <name>"); 
     System.out.println("4. interval m n"); 
     System.out.println("5. sort"); 
     System.out.println("6. end"); 

     while (true) 
     { 
      System.out.println("Enter choice:"); 
      String choice = sc.nextLine(); 
      if(choice.equals("printall")) 
       printAllStudents(students); 
      else if(choice.indexOf("firstname")==0) 
       printAllStudentsByFirstName(students, choice); 
      else if(choice.indexOf("lastname") == 0) 
       printAllStudentsByLastName(students, choice); 
      else if(choice.indexOf("interval") == 0) 
       printAllStudentsByGrades(students, choice); 
      else if(choice.equals("sort")) 
       sort(students); 
      else if(choice.equals("end")) 
       break; 
     } 
    } 

} 

    public class Student 
{ 
    private String fname, lname; 
    private int grade; 

    public Student() 
    { 
     super(); //gives us the ability to override 


    } 

    public Student (String fname, String lname, int grade) 
    { 
     this.fname = fname; 
     this.lname = lname; 
     this.grade = grade; 
    } 

    public String getFname() { 
     return fname; 
    } 

    public void setFname (String fname) { 
     this.fname = fname; 
    } 

    public String getLname() { 
     return lname; 
    } 

    public void setLname(String lname) { 
     this.lname = lname; 
    } 

    public int getGrade() { 
     return grade; 
    } 

    public void setGrade(int grade) { 
     this.grade = grade; 
    } 

    public String toString() 
    { 
     return fname + " " + lname + "\t" + grade; 
    } 
} 

任何幫助將非常感激。

+1

利用[Scanner#hasNextInt()](https://www.tutorialspoint.com/java/util/scanner_hasnextint.htm)在將數據存儲到'grade'之前。 –

+1

請閱讀有關提供[mcve] – GhostCat

回答

1

Scanner運行到意外輸入時,會觸發。在你的情況下,掃描器正在撿起null當它期待int輸入爲fileInput.nextInt()

這與格式student.txt以及你如何解析它有關;嘗試在IDE中逐步執行調試代碼(如果您使用的話),以確定如何修復文本文件解析。

相關問題