你可以使用switch語句,如果你真的想,通過使用枚舉來表示不同的等級:
public class Main {
public static void main(String[] args) {
double gpa = Double.parseDouble(args[0]);
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;
}
}
}
注:
- 我已經糾正的Integer.parseInt傳遞給Double.parseDouble
- 我已經把邏輯放在了你的問題中,但是它確實對3.499這樣的輸入發生了什麼懷疑 - 這將返回一個無效的等級,因爲它在TWO_ONE的最大值和FIRST_CLASS的最小值之間滑動
如果你真的使用了枚舉,你可能不會使用開關打印出檔次。你最好有一個代表等級描述和打印的字符串,即:
public static void main(String[] args) {
double gpa = Double.parseDouble(args[0]);
Grade grade = Grade.getGradeFromGPA(gpa);
if (grade != null) {
System.out.println(grade.description);
} else {
System.out.println("Invalied gpa");
}
}
private enum Grade {
FIRST_CLASS(3.5, 4, "First class Hons"),
TWO_ONE(3, 3.49, "upper Second class Hons"),
TWO_TWO(2.5, 2.99, "Lower Second class Hons"),
PASS(2.49, 2, "Pass"),
FAIL(0, 1.99, "Fail");
private final double minGPA;
private final double maxGPA;
private final String description;
// remaining code omitted for brevity
}
這個故事的寓意是,你不應該讓你的編程錘子(在這種情況下,switch語句)驅動你的設計。你的代碼應該反映你想要解決的問題,你不應該強迫你的問題變成你的代碼的形狀。
您不能使用switch語句來比較double。改用if-else語句。 – Kon
與雙倍,如何創建該代碼 – Deshika22
@ Deshika22:你爲什麼如此渴望使用'switch'語句?這根本不適合範圍。 –