NullPointerException错误(Java)

Gno*_*sis 0 java nullpointerexception

我正在NullPointerException使用这种方法.有人告诉我这是因为student.getId()返回null.我试图解决这个问题,但我无法弄明白.下面只是代码片段,只是方法和Student类.

编辑:我添加了创建数组的部分.

Student[] students ;

public Student[] enterStudents(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter number of students");
    int numOfStudents = input.nextInt();
    Student[] students = new Student[numOfStudents];
    int i;
    for(i = 0; i <= numOfStudents - 1; i++){
        System.out.println("Enter student's ID: ");
        int id = input.nextInt();
        System.out.println("Enter student's first name: ");
        String first = input.next();
        System.out.println("Enter student's last name: ");
        String last = input.next();
        System.out.println("Enter student's class: ");
        String stuClass = input.next();
        Student x = new Student(id,first,last,stuClass);
        students[i] = x;
    }

    return students;

}




public void retrieveStuId(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter student id");
    int searchID = input.nextInt();
    int i;
    for(i = 0; i < students.length;  i++){
        Student student = students[i];
        int search = student.getId();
        if (search == searchID) {
            System.out.println(student.toString());
        }
    }
}

class Student{
    private int studentID;
    private String firstName;
    private String lastName;
    private String stuClass;

    public Student(){
    }

    public Student(int id, String first, String last, String c ){
        studentID = id;
        firstName = first;
        lastName = last;
        stuClass = c;
    }

    public void setID (int id){
        studentID = id;
    }

    public void  setStuClass (String c){
        stuClass = c;
    }

    public void setFirst(String first){
        firstName = first;
    }

    public void setLast(String last){
        lastName = last;
    }

    public String getFirst(){
        return firstName;
    }

    public String getLast(){
        return lastName;
    }

    public int getId(){
        return studentID;
    }

    public String getStuClass(){
        return stuClass;
    } 

    public String toString(){
        return "Student ID: " + studentID + " --- " + "Student Name: " + firstName + " " + lastName + " --- " + "Class:" + stuClass;
    }
}
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助.

sta*_*ker 5

您的students数组具有空值,您尝试取消引用.该错误不在您发布的代码中,而是创建和填充学生数组的位置.

只需检查空值,并打印"未找到学生"等字样.

for(i = 0; i < students.length;  i++){         
   Student student = students[i];             
   if ( student != null ) {
      int search = student.getId();             
      if (search == searchID)                 
          System.out.println(student.toString());      
   }
} 
Run Code Online (Sandbox Code Playgroud)

编辑:我检查了你的代码,它的工作原理,我通过添加测试它

public class StudentTest {

        public static void main(String[] args) {
            StudentTest s = new StudentTest();
        }

        public StudentTest() {
            students = enterStudents();
            retrieveStuId();

        }
        // your code here ...
        Student[] students ;
            // .... end
    }
Run Code Online (Sandbox Code Playgroud)

检查分配enterStudents返回的数组的位置.