正如其他人指出的那樣,一個switch-case
聲明旨在具有離散/枚舉值,這使得它與double
數據類型不兼容使用。如果我理解正確的想法,你會希望你的程序很好地轉化考試點到等級,你可以使用一個enum
定義的最低點,每個等級:
enum Grade {
A(92.5), B(82.5), C(72.5), D(62.5), E(52.5), F(0.0);
private static final Grade[] GRADES = values();
private double minPoints;
Grade(double minPoints) {
this.minPoints = minPoints;
}
public static Grade forPoints(double points) {
for (Grade g : GRADES) {
if (points >= g.minPoints) {
return g;
}
}
return F;
}
}
在Grade
的forPoints()
方法可以讓你查找與考試點相對應的等級。
現在,爲了跟蹤成績的數量,您可以使用EnumMap<Grade, Integer>
而不是個別的計數器變量。請注意,由於查找被編碼到enum
,你不再需要switch-case
:
Map<Grade, Integer> gradeCounters = new EnumMap<>(Grade.class);
// initialize the counters
for(Grade g : Grade.values()) {
gradeCounters.put(g, 0);
}
Scanner input = new Scanner(System.in);
double total = 0;
int gradeCounter = 0;
double points = input.nextDouble(); //read exam points
while (points >= 0) {
total += points; // add points to total
++gradeCounter; // increment number of grades
// increment appropriate letter-grade counter
Grade g = Grade.forPoints(points);
int currentCount = gradeCounters.get(g);
gradeCounters.put(g, currentCount + 1);
points = input.nextDouble();
}
是它在Java? – Supersharp
是的。我也在使用NetBeans IDE,以防萬一這會改變任何東西。 –
你正在說明的是不適合switch語句。會鼓勵你使用'if' –