0

**これは私が作成したクラスの一部です

    class Student{ 
 private String name;

 private float avGrade;

 private float outstandingGrade = 82.0f;

public Student() {  }

public Student(String Name, float avg) {
    name = Name;
    avGrade = avg;
}

public String getName() {
    return name;
}
public void setName(String Name) {
    name = Name;
}

}

これがメインであり、その中の別のメソッドです。

    public static void main(String[] args) {
    Student[][] school = CreateStudentMat();
    school[0][0].setName("Student");
}
public static Student[][] CreateStudentMat(){
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter number of classes in school: ");
    int NumClasses = input.nextInt();
    Student[][] matrix = new Student[NumClasses][];  
    for(int i = 0; i<matrix.length; i++){
        System.out.println("Please enter number of students in class " +(i+1));
        matrix[i] = new Student[input.nextInt()];
    }
    return matrix;
}

[0][0] にあるオブジェクトの名前を school[0][0].setName("Student"); で変更しようとしているとき。

エラーが発生します

スレッド「メイン」での例外 java.lang.NullPointerException at Homework3.main(Homework3.java:13)

私はここで何を間違えましたか?

4

3 に答える 3

6
  • で2次元配列をインスタンス化していますmatrix = new Student[NumClasses][]
  • あなたはN個の一次元配列をインスタンス化していますmatrix[i] = new Student[input.nextInt()]
  • すべての生徒をインスタンス化するわけではありませんmatrix[i][j] = new Student()

したがって、2 次元配列は正しく作成されnullますが、インスタンス化していないため、すべての学生参照はまだです。

于 2013-01-04T13:29:57.007 に答える
0

学生オブジェクトはありません。あなたはnew Student()どこにも電話したことがありません。配列にはオブジェクトがないため、null でメソッドを呼び出すことはできません。

于 2013-01-04T13:30:13.043 に答える
0

おそらく問題は次の場所に存在します。

Student[][] matrix = new Student[NumClasses][]; 

配列の 2 番目の次元のサイズを初期化してみてください。

于 2013-01-04T13:30:53.967 に答える