gpt4 book ai didi

java - 空指针异常 - GPA HH 的 Java 程序

转载 作者:行者123 更新时间:2023-11-30 11:45:51 27 4
gpt4 key购买 nike

这是作业。我已经完成了 90%,但是 NPE 导致我的程序每次都失败。我已经尝试了几种方法并阅读了关于他希望程序如何构建的非常详细的说明,但我仍然无法弄清楚为什么即使在传递数据时它也会出现此异常。我最初认为这是因为数据未在初始测试中通过。

程序运行的第一个 .java 文件:

class TestGPA
{
public static void main(String[] args)
{
if (args.length == 0)
{
System.out.println("Please supply grades to find GPA");
System.exit(0);
}
GPA gpa = new GPA(args);
else
{
GPA gpa = new GPA(args);
gpa.displayResult();
}
}
}

第二个 .java 文件,其中包含许多方法:

class GPA
{
String[] courseIdGrades;
String[] courseIds;
char[] grades;
double gpa;
String errorMsg;

GPA(String[] courseIdGrades)
{
String[] courseIds = new String[courseIdGrades.length];
char[] grades = new char[courseIdGrades.length];
processData();
}

void parseInput()
{
int i = 0;
while( i < courseIdGrades.length )
{
GPAUtil.validateCourseIdGrade(courseIdGrades[i]);
if(errorMsg != "NO_ERROR")
{
break;
}
else
{
courseIds[i] = courseIdGrades[i].substring(0,5).toUpperCase();
grades[i] = Character.toUpperCase(courseIdGrades[i].charAt(5));
i++;
}
}
}

double computeGPA()
{
int sum = 0;
for (int i = 0; i < grades.length; i++)
{
sum += GPAUtil.gradePoints(grades[i]);
}
double gpa = (double) sum / grades.length;
return gpa;
}

void processData()
{
parseInput();
if(errorMsg == "NO_ERROR")
{
computeGPA();
}
else
{
System.out.println("Input error - details are: " + errorMsg);
System.exit(0);
}
}

void displayResult()
{
System.out.println("--------------------");
System.out.println(" Course ID Grade" );
System.out.println("--------------------");
for (int i = 0; i < courseIds.length; i++)
{
System.out.println(" " + courseIds[i] + " " + grades[i]);
}
System.out.println("--------------------");
System.out.println(" GPA = " + gpa);
System.out.println("--------------------");
}
}

第三个 .java 是一个实用类:

public class GPAUtil
{

public static String[] validDepts = {"CS","EE","ME"};

public static String validateCourseIdGrade(String courseIdGrade)
{
String errorMsg = "NO_ERROR";

if (courseIdGrade.length() != 6)
{
errorMsg = "Course ID/Grade string invalid, must be 6 char.";
}

else
{
for(int i = 0; i < 3; i++)
{
if(courseIdGrade.substring(0,2).equalsIgnoreCase(validDepts[i]))
{
errorMsg = "NO_ERROR";
break;
}
else
{
errorMsg = "Dept ID invalid, must be one of: CS, EE, ME";
}

}

}

return errorMsg;

}


static int gradePoints(char grade)
{
int points = 0;
switch(grade)
{
case 'A':
points = 4;
break;
case 'B':
points = 3;
break;
case 'C':
points = 2;
break;
case 'D':
points = 1;
break;
default:
points = 0;
break;
}
return points;
}

}

异常(exception):

Exception in thread "main" java.lang.NullPointerException
at GPA.parseInput(GPA.java:19)
at GPA.processData(GPA.java:48)
at GPA.<init>(GPA.java:13)
at TestGPA.main(TestGPA.java:5)

输入

根据错误消息,问题出现在 GPA 类中的这一行:while( i < courseIdGrades.length )这让我相信,通过不传递参数,它解析为 null,因此没有长度,所以我添加了一个 null 检查。但是,当我传递参数时,我仍然会收到相同的错误集。我不是在寻求答案,但在正确的方向上轻推会非常有帮助。

我尝试过的

我尝试重组代码以阅读 while(i < courseIdGrades[i].length())无济于事并且还硬编码了一个参数并开始传递它但仍然得到相同的待遇。应该发生的是,如果传递了无效参数,它应该显示:Input error - details are: + errorMsgerrorMsg 给出变量位于 GPAUtil .

最佳答案

您永远不会初始化 courseIdGrades。您仅在 GPA 构造函数中初始化 courseIdsgrades。这就是为什么在引用对象时出现异常的原因。

关于java - 空指针异常 - GPA HH 的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10158953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com