0

所以我有这个私有内部类如下:

private class Exam{
   private String course;
   private double score;

   public Exam(String course, double score){
       this.course = course;
       this.score = score;
   }


   public String toString(){
       return String.format("%-25s: %1.2f", course, score);
   }
}

我已经创建了这个的一个实例作为一个数组

private Exam[] preliminaryExams = new Exam[6];

我没有创建这个类,它是 java 学习教程的一部分,我很难填充数组本身。我一直在尝试做的是给分数和课程变量赋值,如下所示:

preliminaryExams[0].score = some double;
preliminaryExams[0].course = some string;

这编译得很好,但是当我尝试使用这些类和方法实际执行一些代码时,我得到

Exception in thread "main" java.lang.NullPointerException

在我尝试将这些值分配给这些变量的第一行。我有点卡在这一点上,任何帮助将不胜感激。

4

4 回答 4

5

创建 的数组后Exam,数组中的每个条目仍指向null。您需要创建 的实例Exam,并在您的数组中分配它们,然后才能开始设置Exam实例的属性。

for (int i = 0; i < 6; i++) {
    preliminaryExams[i] = new Exam (someCourse, someScore);
}
于 2013-07-26T20:28:08.203 回答
2

创建数组后,这些元素中的每一个仍然Exam指向 null。因此,您还必须显式地实例化它们中的每一个。您可以执行以下操作。

for (Exam exam : preliminaryExams){
exam=new Exam(someString,someDouble);
}
于 2013-07-26T20:35:19.297 回答
0

似乎您还没有初始化数组元素,下面的行是设置数组元素的分数字段,而不是元素本身

preliminaryExams[0].score = some double;

确保您已将元素初始化为

preliminaryExams[0] = new Exam(some course, some double);//call appropriate constructor here

在设置分数变量之前(一般来说,primaryExams 的任何字段/方法)

于 2013-07-26T20:29:26.483 回答
0

您实例化了一个数组,Exam但其中包含的每个元素仍然是null,因此您必须显式实例化它们。

既然你有一个Exam构造函数,我不明白你为什么不使用它:

private Exam[] preliminaryExams = new Exam[6];

preliminaryExams[0] = new Exam(some course, some double);
于 2013-07-26T20:29:36.883 回答