第一次尝试使用多个 类 时出现 NullPointerException 错误

Getting NullPointerException errors when trying to use multiple classes for the first time

我正在尝试让 Roster class 中的 addStudent() 方法在这里工作。

它应该将给定的学生添加到该花名册中。如果学生已经在花名册上,或者 numStudents == stopPoint,它不会更改花名册并且 returns 为 false。如果成功它 returns true.

花名册Class:

public class Roster {
    Student[] students;
    int numStudents;
    int stopPoint;
    Course course;


    //constructor for this class initialize this roster to empty
    public Roster(int stopPoint, Course course)
    {
       this.stopPoint = stopPoint;
       this.course = course; 
    }



    //returns a string that represents the object for printing
    public String toString()
    {
       String res = "";
       for(int j = 0; j < numStudents; j++)
       {
          res = res + "\n" + students[j].toString();
       }
       return course + " " + numStudents + "/" + stopPoint+res;
    }




    //returns true if and only if the number of students in it is at stopPoint
      public boolean isFull(int numStudents, int stopPoint)
      {
         if (numStudents == stopPoint)
         {
            return true;
         }
         else
            return false;   
      }



 /*add given student to this roster if student already on roster 
    or numStudents already == stopPoint, will not change roster and return 
    false but return true if successful, else false
 */
    public boolean addStudent(Student student)
    {
        if(this.numStudents < this.stopPoint)
        {
            this.students[numStudents] = student; // here is where I get the error
            this.numStudents++;
            return true;
        }
        else
           return false;

   }
}

测试Class:

public class TestRoster 
{

    public static void main(String[] args) 
    {
        Student s1 = new Student("John","Doe");     
        Course c1 = new Course(198, 111);            
        Roster r1 = new Roster(4, c1);              
        System.out.println(r1);
        testAdd(r1, s1);            
    }

    private static void testAdd(Roster r, Student s)
    {
        System.out.println(s.familyName+" "+r.addStudent(s));        
        System.out.println(r);                                      
    }   
}

学生Class:

public class Student 
{
    String personalName;
    String familyName;

    public Student(String pName, String fName)
    {
        personalName = pName;
        familyName = fName;
    }

    public String toString( )
    {
        return "Student: " + familyName + ", "+ personalName;
    }
}

最后,课程Class:

public class Course 
{
    int deptNum;
    int courseNum;

    public Course(int deptNum, int courseNum)
    {
        this.deptNum = deptNum;
        this.courseNum = courseNum;
    }

    public String toString( )
    {
        return deptNum + ":" + courseNum;
    }


}

这里是错误:

Exception in thread "main" java.lang.NullPointerException
    at assign4.Roster.addStudent(Roster.java:56)
    at assign4.TestRoster.testAdd(TestRoster.java:17)
    at assign4.TestRoster.main(TestRoster.java:13)
Java Result: 1`

其他答案建议使用任意数字进行数组实例化,这不是一个好主意,因为您永远不知道它是否足够。

你的 Roster class 知道应该有多少学生(通过构造函数),你应该用 stopPoint:[=14= 初始化 Student 数组]

Student[] students;
int numStudents;
int stopPoint;
Course course;

public Roster(int stopPoint, Course course)
{
    this.stopPoint = stopPoint;
    this.course = course; 
    this.students = new Student[this.stopPoint]
}

由于您无法触及 class 变量,您可以而且应该在构造函数中初始化数组。