String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
只是一個硬件問題,我無法弄清楚。這個「if」陳述有什麼問題?
String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
只是一個硬件問題,我無法弄清楚。這個「if」陳述有什麼問題?
你應該有一個if-else if
梯:
if (grade >= 90) { letterGrade = "A"; }
else if (grade >= 80) { letterGrade = "B"; }
else if (grade >= 70) { letterGrade = "C"; }
else if (grade >= 60) { letterGrade = "D"; }
..否則,所有的if
語句將被執行。
您應該避免像這樣的硬編碼值。考慮這種情況,稍後某個時候,等級系統會發生變化,並且您開始爲grade >= 50
提供等級E
。那麼更改代碼將是噩夢。
一個更好的辦法是使用enum
。您可能會注意到這些範圍內的行爲。在某個範圍內潛水任何值10,會給你相同的數字。你可以用這個邏輯來創建等級的枚舉:
enum Grade {
A(9), B(8), C(7), D(6);
private final Grade[] GRADES = values();
private final int grade;
private Grade(int grade) { this.grade = grade; }
public int getGrade() { return this.grade; }
public Grade valueOf(int grade) {
for (Grade grade: GRADES) {
if (grade.getGrade() == grade/10)
return grade;
}
return null;
}
}
然後,對於一個特定的等級值,您可以通過使用getValue(grade)
方法得到的字母等級:
Grade letterGrade = Grade.valueOf(grade);
現在,很容易當添加新的等級範圍時擴展枚舉。現在,如果範圍類似於 - [85, 100]
(對於A
),則此枚舉不起作用。爲此,您可以將枚舉中的等級值設置爲下限,如85
(對於A
)。然後改變返回Grade
到>
而不是==
的邏輯。
可以有其他的方式來形成邏輯,但這取決於情況。但這種方法將更加可維護。
下面是引自Effective Java - Item 50:
串是爲枚舉類型較差的替代品。如第30項所述, 枚舉使得枚舉類型常量比字符串好得多。
Aaah,謝謝。非常感謝。 –
@DarbyVance不客氣:)你可以通過點擊它旁邊的勾號來標記答案。 –
對枚舉建議+1。 –
你的條件全部滿足,如果statements.Use if else
String letterGrade = "F";
if (grade >= 90) {
letterGrade = "A";
}
else if (grade >= 80) {
letterGrade = "B";
}
else if (grade >= 70) {
letterGrade = "C";
}
else if (grade >= 60) {
letterGrade = "D";
}else {
letterGrade="none"; //remove else it. so grade "F" remain
}
}
哪裏'grade'從何而來? – Rob
你爲什麼覺得有什麼問題?你有編譯錯誤嗎?如果是這樣,那麼錯誤是什麼?它是否編譯,但給一個意想不到的答案?如果是的話,那麼你期望什麼,它真的做了什麼? – Jesper
嘗試從最小到最大,從'60'開始。 – elclanrs