使用ENUM和switch case的循环Java GPA计算器

时间:2017-06-30 19:48:10

标签: java

更新: 现在我只需要修复它的循环和切换方法来获取用户输入的字母并将它们切换为用于计算gpa的数字。

上一条消息: 我正在尝试制作一个简单的gpa计算器,它已经有ENUM的课程,它只会询问用户的字母等级并将其切换为一个数字,以便总和除以代码上已经提供的学分。无需输入已存在代码的信用小时数。 我试图这样做,但不知道如何使用开关将字母更改为数字,我需要它来询问每个课程。它只询问我第一门课程的成绩,只接受一个答案。像每个例子2。谢谢。 我现在拥有的:

import java.util.Scanner;

public class Degree {

    enum Courses {MATH5070, MATH5080, STAT6020, STAT6050, DATA6200, DATA6300}

    enum Grades {A, B, C}

    public static void main(String[] args) {
        Courses[] grade = Courses.values();

        Scanner keyboard = new Scanner(System.in);
        double points = 0, sum = 0;


        for (int i = 0; i < grade.length; i++) {
            System.out.print("Enter Grade (A,B, C) for " + grade[i]);
            points = keyboard.nextDouble();
            // add course grades and divide by credits 3 each course equals 18 in this case
            sum = sum + points * 3 / 18 ; 
            System.out.println("Total GPA points = " + sum);

            {
                Grades Letters = null;
                String answer = keyboard.next();
                answer = answer.toUpperCase();
                Letters = Grades.valueOf(answer);

                switch (Letters) {
                    case A:
                        double A = 4;
                        break;
                    case B:
                        double B = 3;
                        break;
                    case C:
                        double C = 2;
                        break;
                    default:
                        System.out.println("Wrong");
                        break;
                }

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我花了一些时间将代码重写为尽可能干净。我做了各种更改,希望有助于简化代码。学习Java时,语言会“乱七八糟”,当您有问题时,请尝试运行它。例如,尝试修改我的代码重写,以在switch语句中使用原始Grades枚举而不是字符串。

下面你可以看到一个开关如何与String一起使用。 Enum的工作与枚举类似。有关示例,请参阅docs

一些变化:

  1. 重命名了几个变量。
  2. 删除了两个枚举。
  3. 更改了GPA的计算方式。
  4. 为了清晰起见,添加了一种方法getPointsForLetterGrade
  5. 代码:

    import java.util.Scanner;
    
    public class Degree {
        private static final String[] courses = {"MATH5070", "MATH5080", "STAT6020", "STAT6050", "DATA6200", "DATA6300"};
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            double sumOfPoints = 0;
    
            for (String course : courses) {
                System.out.println("Enter Grade (A, B, C) for " + course);
                String letterGrade = input.nextLine().toUpperCase();
                sumOfPoints += getPointsForLetterGrade(letterGrade);
            }
            double gpa = sumOfPoints / courses.length;
            System.out.println("Total GPA points = " + gpa);
        }
    
        private static int getPointsForLetterGrade(String letterGrade) {
            int pointsForLetter = 0;
            switch (letterGrade) {
                case "A":
                    pointsForLetter = 4;
                    break;
                case "B":
                    pointsForLetter = 3;
                    break;
                case "C":
                    pointsForLetter = 2;
                    break;
                default:
                    System.out.println("Wrong");
                    break;
            }
            return pointsForLetter;
        }
    }