String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
只是一个硬件问题,我无法弄清楚。
String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
只是一个硬件问题,我无法弄清楚。
你应该有一个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
语句都将被执行。
您应该避免像这样对值进行硬编码。考虑稍后某个时候,成绩系统发生变化,您开始E
为grade >= 50
. 那么更改代码对您来说将是一场噩梦。
更好的处理方法是使用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]
现在,如果范围类似于 -for ,则此枚举将不起作用A
。为此,您可以将枚举中的等级值作为下限,例如85
for A
。然后改变返回的逻辑,Grade
而>
不是==
。
可以有其他方法来形成逻辑,但这取决于情况。但是这种方法将更易于维护。
这是来自Effective Java - Item 50的引述:
字符串是枚举类型的不良替代品。正如条款 30 中所讨论的,枚举比字符串更适合枚举类型常量。
您的条件满足所有 if 语句。使用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
}
}