这个“if”声明有什么问题?

时间:2013-09-21 05:51:35

标签: 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"; }

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

2 个答案:

答案 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
        }
    }