Ошибка NullPointerException (Java) - PullRequest
       3

Ошибка NullPointerException (Java)

0 голосов
/ 05 декабря 2011

Я получаю NullPointerException при использовании этого метода. Кто-то сказал мне, что это потому, что student.getId() возвращает ноль. Я пытался это исправить, но я не могу понять это. Ниже приведен фрагмент кода, только метод и класс Student.

edit: я добавил часть, где был создан массив.

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;
    }
}

Заранее благодарен за любую помощь.

Ответы [ 5 ]

5 голосов
/ 05 декабря 2011

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

Просто проверьте нулевые значения и напечатайте что-то вроде «студент не найден».

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());      
   }
} 

EDIT: Я проверил ваш код, он работает, я проверил, добавив

public class StudentTest {

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

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

        }
        // your code here ...
        Student[] students ;
            // .... end
    }

Проверьте место, где вы назначаете массив, возвращаемый enterStudents.

1 голос
/ 05 декабря 2011

Есть две проблемы с этим кодом. Первый относится к слежке, как упоминалось ранее. Во-вторых, до тех пор, пока я обеспокоен этим кодом, существует проблема с не назначенным типом возврата переменной. В основном я думаю, что вы забыли назначенный возврат из вашего метода enterStudents в вашу переменную. Надеюсь, это понятно для вас :)

0 голосов
/ 05 декабря 2011

У вас есть два (то есть ДВА) объявления для чего-то, называемого students.Один из них (локальная переменная) инициализируется, а другой (переменная экземпляра) не инициализируется.NullPointerException выбрасывается, когда вы пытаетесь использовать тот, который не инициализирован.

У вас не должно быть двух объявлений.

Поскольку это домашняя работа, я оставлю ее навам выяснить, какую декларацию удалить ... и что делать с другой.

0 голосов
/ 05 декабря 2011

Как вы создали массив студентов? Это инициализировано со студентом для каждой позиции?

Чтобы узнать, напечатайте стоимость студента после этой строки:

 Student student = students[i];

с

 System.out.println(student);

например. Также проверьте, все ли студенты в массиве были инициализированы с правильный идентификатор, поэтому getIt () возвращает ненулевое значение. (попробуйте распечатать значение после назначения поиска).

0 голосов
/ 05 декабря 2011

В вашем массиве студентов есть неопределенный (нулевой) студент. Проверьте, не равен ли он нулю, затем используйте метод getID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...