初学java,帮我修复程序?

时间:2011-08-11 05:43:12

标签: java arrays java.util.scanner

我正在尝试为大学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);
    }
}

4 个答案:

答案 0 :(得分:8)

您忘记初始化gradeNullPointerException告诉您gradenull。首次尝试使用grade时,会在法规grade[counter] = 4;中抛出异常。使用new分配所需的空间。

答案 1 :(得分:5)

成绩初始化也可以动态完成:

double []grade = new double[4];

double []grade = new double[classes];

同样对value执行相同操作。

答案 2 :(得分:0)

以下是清理代码的几点建议:

  • 尝试更加符合您的格式。确保所有内容都正确缩进,并且在行的开头或结尾处没有延迟空格(第18行)。
  • 您应该将变量声明为尽可能靠近您使用它们的第一个位置。这使得代码更具可读性,最大限度地缩小了范围。例如,在第18行,您初始化letter,但它永远不会在while语句的范围之外使用。你应该在那里声明变量,以及初始化器(String letter = gradeObject.next())。
  • 不鼓励以type name[]形式声明数组。建议改为使用type[] name表单。
  • 尝试将您的程序分成不同的部分。例如,对于此程序,您可以清楚地看到涉及的几个步骤。也就是说,首先必须获取一些输入,然后解析它,然后计算返回值。可以将这些部分分解为单独的方法来清理代码并促进重用。虽然它似乎不会为这样一个简单的程序带来许多好处,但一旦你开始处理更大的问题,这个组织将是绝对必需的。

答案 3 :(得分:0)

NullPointerException意味着您正在尝试访问不存在的内容。

由于您的成绩[]为空,因此通过成绩[计数器]在第21行访问它实际上意味着您正在访问尚未创建的内容。

您需要初始化数组,因此它实际上有一个实例。