0
 String letterGrade = "F"; 
if (grade >= 90) { letterGrade = "A"; }
if (grade >= 80) { letterGrade = "B"; } 
if (grade >= 70) { letterGrade = "C"; } 
if (grade >= 60) { letterGrade = "D"; }

只是一个硬件问题,我无法弄清楚。

4

2 回答 2

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语句都将被执行。


您应该避免像这样对值进行硬编码。考虑稍后某个时候,成绩系统发生变化,您开始Egrade >= 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。为此,您可以将枚举中的等级值作为下限,例如85for A。然后改变返回的逻辑,Grade>不是==

可以有其他方法来形成逻辑,但这取决于情况。但是这种方法将更易于维护。

这是来自Effective Java - Item 50的引述:

字符串是枚举类型的不良替代品。正如条款 30 中所讨论的,枚举比字符串更适合枚举类型常量。

于 2013-09-21T05:52:29.227 回答
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
        }
    }
于 2013-09-21T05:53:37.907 回答