Java 中的空指针异常,尽管已初始化变量
Null pointer exception in Java despite having initialized the varibale
public class GradeClass {
String nameF;
int[] gradesF = new int[4];
float average;
public GradeClass(String name, int grade1, int grade2, int grade3, int grade4) {
nameF = name;
gradesF[0] = grade1;
gradesF[1] = grade2;
gradesF[2] = grade3;
gradesF[3] = grade4;
}
public float getAverage() {
average = (gradesF[0] + gradesF[1] + gradesF[2] + gradesF[3] / gradesF.length);
return average;
}
// Used to reference number of sides used in current state of die.
public String getName() {
return nameF;
}
// Used to reference number of sides used in current state of die.
public int[] getGrades() {
return gradesF;
}
}
else if (a == 2) {
System.out.println("Enter name of "+ (a+1) +" person. :: ");
nameI = keyboard.next();
while (size < 1 || size > 4 ) {
System.out.println("How many grades would you like to enter? 'Max-4' :: ");
size = keyboard.nextInt();
}
while (gradeArray[b] > 1 || gradeArray[b] > 100 ) {
System.out.println("Enter the " + size + " grades here :: ");
for(b=0; b<size; b++) {
gradeArray[b] = keyboard.nextInt();
}
GradeClass student3 = new GradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
} }
else {
numPersons = 0;
}
}
grade1A = student1.gradesF[0] + student2.gradesF[0] + student3.gradesF[0];
averageA = student1.average + student2.average + student3.average;
System.out.println("Name \t\t Grade 1 \t Grade 2 \t Grade 3 \t Grade 4 \t Average \n");
System.out.println(student1.getName() + "\t" + student1.gradesF[0] +"\t" +student1.gradesF[1]+"\t" +student1.gradesF[2] +"\t" + student1.gradesF[3] + student1.average + "\n");
System.out.println("Average\t\t" + grade1A + "\t" + grade2A + "\t" + grade3A + "\t" + grade4A + "\t" + averageA + "\n");
}}
在我的主要即时消息中,我试图调用 class 的另一个实例。它需要做的是获取参与者的数量、姓名、他们有多少成绩、他们的成绩,将所有成绩输入一个数组,将姓名和成绩一起发送到 gradeClass 并允许我从那里调用和使用它们.
gradeClass student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
当我尝试使用它时它告诉我我需要一个变量
gradeClass student1;
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
然后它告诉我初始化 student1 所以
gradeClass student1 = null;
从这里我得到“java.lang.NullPointerException
有什么想法吗?调用错误
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
首先 class 名称应以大写字符开头。遵循 Java 惯例。
despite having initialized the varibale
int[] gradesF;
您已经定义了一个变量,但是由于您没有指定数组的大小,该变量为null。
gradesF[0] = grade1;
gradesF[1] = grade2;
gradesF[2] = grade3;
gradesF[3] = grade4;
您不能在不先定义数组大小的情况下尝试为数组赋值。
您使用如下代码定义一个数组:
int[] gradesF = new int[4];
现在您可以使用上面的代码分配数组中的 4 个值。
编辑:
gradeClass student1;
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
首先没有必要在两个语句中这样做,所以大多数人会这样做:
gradeClass student1 = new gradeClass(nameI, gradeArray[0], gradeArray[1], gradeArray[2], gradeArray[3]);
但问题是,在您发布的代码中,您从未创建“gradeArray”变量并使用值对其进行初始化。您不能不先声明变量就直接使用它。
好的,我知道出了什么问题,
GradeClass student3 = new GradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
在 if/else 语句中,不允许我在它之外调用它。我必须将它发送到 if/else 语句内的 class,然后在 if/else 语句内再次调用它并将其分配给一个新变量。感谢您的帮助!
public class GradeClass {
String nameF;
int[] gradesF = new int[4];
float average;
public GradeClass(String name, int grade1, int grade2, int grade3, int grade4) {
nameF = name;
gradesF[0] = grade1;
gradesF[1] = grade2;
gradesF[2] = grade3;
gradesF[3] = grade4;
}
public float getAverage() {
average = (gradesF[0] + gradesF[1] + gradesF[2] + gradesF[3] / gradesF.length);
return average;
}
// Used to reference number of sides used in current state of die.
public String getName() {
return nameF;
}
// Used to reference number of sides used in current state of die.
public int[] getGrades() {
return gradesF;
}
}
else if (a == 2) {
System.out.println("Enter name of "+ (a+1) +" person. :: ");
nameI = keyboard.next();
while (size < 1 || size > 4 ) {
System.out.println("How many grades would you like to enter? 'Max-4' :: ");
size = keyboard.nextInt();
}
while (gradeArray[b] > 1 || gradeArray[b] > 100 ) {
System.out.println("Enter the " + size + " grades here :: ");
for(b=0; b<size; b++) {
gradeArray[b] = keyboard.nextInt();
}
GradeClass student3 = new GradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
} }
else {
numPersons = 0;
}
}
grade1A = student1.gradesF[0] + student2.gradesF[0] + student3.gradesF[0];
averageA = student1.average + student2.average + student3.average;
System.out.println("Name \t\t Grade 1 \t Grade 2 \t Grade 3 \t Grade 4 \t Average \n");
System.out.println(student1.getName() + "\t" + student1.gradesF[0] +"\t" +student1.gradesF[1]+"\t" +student1.gradesF[2] +"\t" + student1.gradesF[3] + student1.average + "\n");
System.out.println("Average\t\t" + grade1A + "\t" + grade2A + "\t" + grade3A + "\t" + grade4A + "\t" + averageA + "\n");
}}
在我的主要即时消息中,我试图调用 class 的另一个实例。它需要做的是获取参与者的数量、姓名、他们有多少成绩、他们的成绩,将所有成绩输入一个数组,将姓名和成绩一起发送到 gradeClass 并允许我从那里调用和使用它们.
gradeClass student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
当我尝试使用它时它告诉我我需要一个变量
gradeClass student1;
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
然后它告诉我初始化 student1 所以
gradeClass student1 = null;
从这里我得到“java.lang.NullPointerException
有什么想法吗?调用错误
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
首先 class 名称应以大写字符开头。遵循 Java 惯例。
despite having initialized the varibale
int[] gradesF;
您已经定义了一个变量,但是由于您没有指定数组的大小,该变量为null。
gradesF[0] = grade1;
gradesF[1] = grade2;
gradesF[2] = grade3;
gradesF[3] = grade4;
您不能在不先定义数组大小的情况下尝试为数组赋值。
您使用如下代码定义一个数组:
int[] gradesF = new int[4];
现在您可以使用上面的代码分配数组中的 4 个值。
编辑:
gradeClass student1;
student1 = new gradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
首先没有必要在两个语句中这样做,所以大多数人会这样做:
gradeClass student1 = new gradeClass(nameI, gradeArray[0], gradeArray[1], gradeArray[2], gradeArray[3]);
但问题是,在您发布的代码中,您从未创建“gradeArray”变量并使用值对其进行初始化。您不能不先声明变量就直接使用它。
好的,我知道出了什么问题, GradeClass student3 = new GradeClass(nameI, gradeArray[0],gradeArray[1],gradeArray[2],gradeArray[3]);
在 if/else 语句中,不允许我在它之外调用它。我必须将它发送到 if/else 语句内的 class,然后在 if/else 语句内再次调用它并将其分配给一个新变量。感谢您的帮助!