String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
只是一个我无法弄清楚的硬件问题。
答案 0 :(得分:10)
你应该有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]
A
,则此枚举不起作用。为此,您可以将枚举值作为下限,例如85
A
。然后更改将Grade
返回>
而不是==
的逻辑。
可以有其他方式来形成逻辑,但这取决于具体情况。但这种方法将更易于维护。
以下是Effective Java - Item 50的引用:
字符串是枚举类型的不良替代品。如第30项所述, 枚举使枚举类型常量远远超过字符串。
答案 1 :(得分:1)
您的条件满足所有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
}
}