首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPA阵列计算误差

GPA阵列计算误差
EN

Stack Overflow用户
提问于 2016-04-20 01:35:46
回答 1查看 523关注 0票数 0

我的gpa程序有问题,我必须使用两个数组存储一个等级和它的学分和计算gpa。到目前为止,除了gpa无法正确计算之外,其他一切似乎都在起作用,而且我也不确定我错过了什么(可能很简单)。

到目前为止,我的代码是:

Gpa课程:

代码语言:javascript
复制
import java.util.*;

public class Gpa{

      int[] credits = new int[4];
      String[] grades = new String[4];

      private int numCourses;
      private int maxCourses;
      private int sumOfCourses;
      private int sumCredits;
      private int sumPoints;
      int newCredits;
      int totalSum = 0;
      int total = 0;


      public Gpa(int noCourses){
        maxCourses = noCourses;
        numCourses = 0; 


      }

      public void addCourse(int _newCredits, String newGrade){
         for (int i=0; i<maxCourses; i++){
           newCredits = _newCredits;
           credits[i] = newCredits;
         }
         for (int i=0; i<maxCourses; i++){
            grades[i] = newGrade;
         }
            switch (newGrade) {
               case "A":
               case "a":
                  newGrade = "4";
                  break;
               case "B":
               case "b":
                  newGrade = "3";
                  break;
               case "C":
               case "c":
                  newGrade = "2";
                  break;
               case "D":
               case "d":
                  newGrade = "1";
                  break;
               case "F":
               case "f":
                  newGrade = "0";
                  break;
              }
          sumPoints = sumPoints + (newCredits * Integer.parseInt(newGrade));
          numCourses++;

      }

      public double calcGPA(){
         for (int i=0; i<maxCourses; i++){
            sumCredits = sumCredits + newCredits;
         }
         double gpa = (double)sumPoints/sumCredits;
         return gpa;
      }


















} // end class

测试类:

代码语言:javascript
复制
import java.util.Scanner;

public class GpaTestEx2
{

    public static void main (String[] args)
    {
        //declarations
        Scanner in = new Scanner(System.in); //input object
        int numCourses; //number of courses - can be changed
        int credits;        //number of credits for a course
        String grade;       //grade for course


        //read in number of courses
        System.out.print("Enter number of courses: ");
        numCourses = in.nextInt();

        //create Gpa object to hold specified number of courses
        Gpa myGPA = new Gpa(numCourses);

        //read in all courses and add course information to Gpa object
        for (int k=0; k<numCourses; k++)
        {
            System.out.print("Enter credits for course " + (k+1) + ": ");
            credits = in.nextInt();
            System.out.print("Enter grade for course " + (k+1) + ": ");
            grade = in.next();

            myGPA.addCourse(credits, grade);
        }

        //print results
        System.out.println();
        System.out.printf("GPA is %4.2f%n", myGPA.calcGPA( )); 

    } //end main
}

当我输入课程学分和分数时,它没有正确计算gpa。例如,如果用户输入说有2门课程,其中一门有4学分,A级,另一门有3学分,B级。当它应该是3.57时,我得到了大约4.17的gpa。

任何帮助都会很好,我可能会或不会错过一些简单的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 02:20:52

似乎每次有人插入一个值时,您都在对数组中的每个元素进行索引。我们只需要改变一个元素,当一个新的等级被添加。GPA课程:

代码语言:javascript
复制
public class Gpa {

    private int[] credits;
    private String[] grades;
    private int currentGrade;

    public Gpa(int numGrades) {
        credits = new int[numGrades];
        grades = new String[numGrades];
        currentGrade = 0;
    }

    public void addGrade(String letterGrade, int credit) {
        grades[currentGrade] = letterGrade;
        credits[currentGrade] = credit;
        currentGrade = currentGrade + 1;
    }

    public double getGpa() {
        double totalPoints = 0;
        double totalWeight = 0;

        for (int i = 0; i < currentGrade; i++) {
            totalPoints = totalPoints + (letterToGpa(grades[i]) * credits[i]);
            totalWeight = totalWeight + credits[i];
        }

        return totalPoints / totalWeight;
    }

    private double letterToGpa(String letter) {
        char first = letter.toUpperCase().charAt(0);
        switch (first) {
            case 'A':
                return 4.0;
            case 'B':
                return 3.0;
            case 'C':
                return 2.0;
            case 'D':
                return 1.0;
        }
        return 0.0;
    }
}

测试类现在应该可以正常工作了:

代码语言:javascript
复制
public static void main(String[] args) {
    Scanner in = new Scanner(System.in); //input object
    int numCourses; //number of courses - can be changed
    int credits;        //number of credits for a course
    String grade;       //grade for course

    //read in number of courses
    System.out.print("Enter number of courses: ");
    numCourses = in.nextInt();

    //create Gpa object to hold specified number of courses
    Gpa t = new Gpa(numCourses);

    //read in all courses and add course information to Gpa object
    for (int k=0; k<numCourses; k++)
    {
        System.out.print("Enter credits for course " + (k+1) + ": ");
        credits = in.nextInt();
        System.out.print("Enter grade for course " + (k+1) + ": ");
        grade = in.next();

        t.addGrade(grade, credits);
    }

    //print results
    System.out.println();
    System.out.printf("GPA is %4.2f%n", t.getGpa()); 
}

请注意,这显然不是最好的方法,也不是很好地遵循面向对象的模式,但是OP的赋值要求我们只使用一个类,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36732344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档