Java 机智';s以NullPointerException结尾
所以,我的任务是编写一个程序,接受学生姓名和成绩,并利用多个数组。我已经以不同的方式多次重写了抛出运行时错误的代码部分,但是使用了相同的NullPointerException错误。我已经运行了将数组内容打印到控制台的测试,但还没有看到它返回“null”。所以我在这里迷路了 错误:Java 机智';s以NullPointerException结尾,java,nullpointerexception,Java,Nullpointerexception,所以,我的任务是编写一个程序,接受学生姓名和成绩,并利用多个数组。我已经以不同的方式多次重写了抛出运行时错误的代码部分,但是使用了相同的NullPointerException错误。我已经运行了将数组内容打印到控制台的测试,但还没有看到它返回“null”。所以我在这里迷路了 错误: Exception in thread "main" java.lang.NullPointerException at GradeBook.setScoreArray(GradeBook.java:41)
Exception in thread "main" java.lang.NullPointerException
at GradeBook.setScoreArray(GradeBook.java:41)
at GradeBookApp.main(GradeBookApp.java:72)
GradeBookApp(主应用程序):
import java.util.Scanner;
导入java.util.array;
公共类GradeBookApp
{
公共静态void main(字符串[]args)
{
//常数
最终学生人数=2人;
最终int NUM_分数=4;
//变数
双倍平均值;
碳聚酯薄膜;
我的学生;
//阵列
double[]scoreArray=新的double[NUM_学生][NUM_分数];
String[]studentArray=新字符串[NUM_STUDENTS];
//初始化扫描仪
扫描仪键盘=新扫描仪(System.in);
对于(int n=0;n100 | |计分员<0)
{
System.out.println(“***分数必须仅为0-100!***”);
}
}而(计分员>100 | |计分员<0);
记分数组[i][s]=记分人;
//System.out.println(计分员+”添加到位置“+i+”、“+s”);
}
System.out.println(“”);
}
System.out.println(Arrays.deepToString(scoreArray));//这可以按预期工作
成绩册我的成绩册=新成绩册(NUM_分数,NUM_学生);
对于(int index=0;index
成绩册(班级):
公共班级成绩册{
私有字符串[]学生姓名;
private char[]letterGrades={'A','B','C','D','F'};
私人双[]学生分数;
私立国际学生;
私人国际货币基金组织;
公共成绩册(整数分数,整数学生)
{
numStudents=NUM_学生;
numcores=NUM_分数;
}
公共无效设置学生阵列(字符串学生)
{
//设置学生数组
对于(int i=0;i=0&&平均值<60)
{
字母=字母等级[4];
}
否则如果(平均值>60和平均值<70)
{
字母=字母等级[3];
}
否则如果(平均值>70和平均值<80)
{
字母=字母等级[2];
}
否则如果(平均值>80和平均值<90)
{
字母=字母等级[1];
}
否则,如果(average>90&&average您使用private double[]]studentScores;
声明studentScores
,但您不在任何地方进行初始化。在您初始化它之前,它是一个空指针。当您知道它的维度时,可以在构造函数中执行此操作:
studentScores = new double[numStudents][numScores];
<>代码>学生> 是如何初始化的?考虑提供一个演示你的问题的代码。这不是一个代码转储,而是你正在做的一个例子,它突出了你所面临的问题。这将导致更少的混乱和更好的响应。你初始化<代码>学生成绩< /代码>,因为如果这是一个<代码>空。
,显然您无法访问[i]
…将整个类视为引用是最有用的,其他地方可能有不正确的地方导致这里的标记。每当您发布关于获取异常的内容时,总是,总是,总是发布堆栈跟踪。谢谢
public class GradeBook {
private String[] studentNames;
private char[] letterGrades = { 'A', 'B', 'C', 'D', 'F' };
private double[][] studentScores;
private int numStudents;
private int numScores;
public GradeBook(int NUM_SCORES, int NUM_STUDENTS)
{
numStudents = NUM_STUDENTS;
numScores = NUM_SCORES;
}
public void setStudentArray(String students)
{
//set the student array
for (int i = 0; i < numStudents; i++)
{
studentNames[i] = students;
}
}
public void setScoreArray(double scores)
{
//for each student...
for (int i = 0; i < numStudents; i++)
{
//set each individual score
for (int s = 0; s < numScores; s++)
{
studentScores[i][s] = scores;
}
}
}
public String getStudentName(int pos)
{
return studentNames[pos];
}
public double getGradeAvg(int pos)
{
double total = 0;
double avg = 0;
//use the position variable to iterate over the correct test scores...
for (int i = 0; i < numScores; i++)
{
total += studentScores[pos][i];
}
avg = total / numScores;
return avg;
}
public char getLetterGrade(double average)
{
char letter = 'Z';
if (average >= 0 && average < 60)
{
letter = letterGrades[4];
}
else if (average > 60 && average < 70)
{
letter = letterGrades[3];
}
else if (average > 70 && average < 80)
{
letter = letterGrades[2];
}
else if (average > 80 && average < 90)
{
letter = letterGrades[1];
}
else if (average > 90 && average <= 100)
{
letter = letterGrades[0];
}
return letter;
}
}
studentScores = new double[numStudents][numScores];