我正在尝试为大学gpa制作一个计算器。如果陈述只说每个字母等级是什么,我就把所有这些都剪掉了。我修复了我的第一个程序,让任何人再次看到这个。该程序现在可以工作,但无论我在gpa中键入的字母,它返回的是2.0。如果有人看到任何错误,将再次非常感谢。感谢
import java.util.Scanner;
public class universityGPA {
public static void main(String args[]){
int classes = 4;
int units[] = {3, 2, 4, 4};
double[] grade = new double[4];
double[] value= new double[4];
int counter = 0;
double total = 0;
double gpa;
String letter;
while(classes > counter){
Scanner gradeObject = new Scanner(System.in);
letter = gradeObject.next();
if(letter.equalsIgnoreCase("A+") || letter.equalsIgnoreCase("A")){
grade[counter] = 4;
}
if(letter.equalsIgnoreCase("F")){
grade[counter] = 0;
}
value[counter] = grade[counter] * units[counter];
counter++;
}
for(int i = 0; i < classes; i++ ){
total += value[i];
}
gpa = total/classes;
System.out.println("You gpa is " +gpa);
}
}
答案 0 :(得分:8)
您忘记初始化grade
。 NullPointerException
告诉您grade
是null
。首次尝试使用grade
时,会在法规grade[counter] = 4;
中抛出异常。使用new
分配所需的空间。
答案 1 :(得分:5)
成绩初始化也可以动态完成:
double []grade = new double[4];
或
double []grade = new double[classes];
同样对value
执行相同操作。
答案 2 :(得分:0)
以下是清理代码的几点建议:
letter
,但它永远不会在while语句的范围之外使用。你应该在那里声明变量,以及初始化器(String letter = gradeObject.next()
)。type name[]
形式声明数组。建议改为使用type[] name
表单。答案 3 :(得分:0)
NullPointerException意味着您正在尝试访问不存在的内容。
由于您的成绩[]为空,因此通过成绩[计数器]在第21行访问它实际上意味着您正在访问尚未创建的内容。
您需要初始化数组,因此它实际上有一个实例。