有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用带枚举的switch语句

我从这个网站上找到了以下内容。我添加了一些代码来获取用户输入。但在switch语句的开头有一个名为NullPointerExecption的异常

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        double gpa;
        System.out.println("Enter your GPA: ");
        gpa = input.nextDouble();
        Grade grade = Grade.getGradeFromGPA(gpa);



        switch (grade) {
            case FIRST_CLASS:   System.out.println("First class Hons"); break;
            case TWO_ONE:       System.out.println("upper Second class Hons"); break;
            case TWO_TWO:       System.out.println("Lower Second class Hons"); break;
            case PASS:          System.out.println("Pass"); break;
            case FAIL:          System.out.println("Fail"); break;
            default:            System.out.println("Invalied GPA");
        }
    }

    private enum Grade {
        FIRST_CLASS(3.5, 4),
        TWO_ONE(3, 3.49),
        TWO_TWO(2.5, 2.99),
        PASS(2.49, 2),
        FAIL(0, 1.99);

        private final double minGPA;
        private final double maxGPA;

        Grade(final double minGPA, final double maxGPA) {
            this.minGPA = minGPA;
            this.maxGPA = maxGPA;
        }

        static Grade getGradeFromGPA(double gpa) {
            for (Grade grade : Grade.values()) {
                if (grade.maxGPA >= gpa && grade.minGPA <= gpa) {
                    return grade;
                }
            }
            //invalid GPA
            return null;
        }
    }

我认为它不会通过getGradeFromGPA()方法返回任何内容


共 (1) 个答案

  1. # 1 楼答案

    I think it doesn't return anything by getGradeFromGPA() method.

    没错。例如,如果输入55getGradeFromGPA将返回null

    请注意,一些double无法准确表示,因此,如果您输入2.49,这也将产生null

    (另外,您似乎交换了PASSenum上的参数。)

    How to fix this?

    关于double的问题,我建议您:

    private enum Grade {
        FIRST_CLASS(3.5),
        TWO_ONE(3),
        TWO_TWO(2.5),
        PASS(2),
        FAIL(0);
    
        private final double minGPA;
    
        Grade(final double minGPA) {
            this.minGPA = minGPA;
        }
    
        static Grade getGradeFromGPA(double gpa) {
            for (Grade grade : Grade.values()) {
                if (gpa > grade.minGPA)
                    return grade;
            }
            //invalid GPA
            return null;
        }
    }
    

    然而,当你进入时,比如说,55的情况需要处理。最好的方法可能是使用异常:

    static Grade getGradeFromGPA(double gpa) {
        for (Grade grade : Grade.values()) {
            if (gpa > grade.minGPA)
                return grade;
        }
        //invalid GPA
        throw new IllegalArgumentException();  // <     
    }
    

    try {
        Grade grade = Grade.getGradeFromGPA(gpa);
        switch (grade) {
            case FIRST_CLASS:   System.out.println("First class Hons"); break;
            case TWO_ONE:       System.out.println("upper Second class Hons"); break;
            case TWO_TWO:       System.out.println("Lower Second class Hons"); break;
            case PASS:          System.out.println("Pass"); break;
            case FAIL:          System.out.println("Fail"); break;
        }
    } catch (IllegalArgumentException e) {
        System.out.println("Invalied GPA");
    }