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
语句将被执行。
您应该避免这样的硬编码值。考虑稍后的情况,等级系统发生变化,您开始为 grade >= 50
提供等级 E
。那么你修改代码将是一场噩梦。
更好的处理方法是使用枚举
。您可能会注意到这些范围内的行为。将特定范围内的任何值除以 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);
现在,添加新的成绩范围时可以轻松扩展枚举。现在,如果 A
的范围类似于 - [85, 100]
,则此枚举将不起作用。为此,您可以将枚举中的 Grade 值作为下限,例如 A
的 85
。然后将返回 Grade
的逻辑更改为 >
而不是 ==
。
可以有其他方式来形成逻辑,但这取决于具体情况。但这种方法将更易于维护。
这里引用 Effective Java - Item 50 :
Strings are poor substitutes for enum types. As discussed in Item 30, enums make far better enumerated type constants than strings.
关于java - "if"语句有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18929414/