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 楼答案
没错。例如,如果输入
55
,getGradeFromGPA
将返回null
请注意,一些double无法准确表示,因此,如果您输入
2.49
,这也将产生null
(另外,您似乎交换了
PASS
enum上的参数。)关于
double
的问题,我建议您:然而,当你进入时,比如说,
55
的情况需要处理。最好的方法可能是使用异常:及