我从这个网站上发现了以下内容。我添加了一些代码来获取用户输入。但是在 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()
方法返回任何内容。
最佳答案
如果您输入无效的 GPA,Grade.getGradeFromGPA(gpa)
将返回 null
,并且不能在 switch
语句中使用。
如果您愿意,您可以明确地处理它:
Grade grade = Grade.getGradeFromGPA(gpa);
if (grade == null) {
System.out.println("Invalid GPA");
}
else {
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;
}
}
关于java - 将 switch 语句与枚举一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524096/