java - "if"语句有什么问题?

标签 java if-statement

 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 值作为下限,例如 A85 。然后将返回 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/

相关文章:

java - 如何在java中清除二维数组以及如何备份我的二维数组?

php - php 的分支预测

c++ - 使用 if-else 控制结构的意外输出

ios - 当选择 UIButton 时,文本标签上会出现一个白色框

c# - 我怎样才能在转发器中做一个 if 语句

java - 如何在 Spring Boot 中使用 RestTemplate 发送表情符号?

java - 合并排序是重复数组条目

jar - 如何设置 jar 应用程序使用 Java 6 而不是 7

java - 对 JTable 的内容进行排序

Javascript - 使用 "IF"与 "SWITCH"将 toDateString 月份从文本字符串解析为数字字符串