String letterGrade = "F";
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; }
if (grade >= 70) { letterGrade = "C"; }
if (grade >= 60) { letterGrade = "D"; }
Run Code Online (Sandbox Code Playgroud)
只是一个我无法弄清楚的硬件问题.
Roh*_*ain 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"; }
Run Code Online (Sandbox Code Playgroud)
..否则所有的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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,对于特定等级值,您可以使用以下getValue(grade)方法获得字母等级:
Grade letterGrade = Grade.valueOf(grade);
Run Code Online (Sandbox Code Playgroud)
现在,添加新的成绩范围时,可以轻松扩展枚举.现在,如果范围是这样的枚举是行不通的- [85, 100]的A.对于这一点,你可以在枚举级的值作为下限,喜欢85的A.然后换回来的逻辑Grade来>代替==.
可以有其他方式来形成逻辑,但这取决于具体情况.但这种方法将更易于维护.
以下是Effective Java的引用- 第50项:
字符串是枚举类型的不良替代品.正如第30项中所讨论的,枚举产生的枚举类型常量远远超过字符串.