成绩的Java枚举

时间:2014-05-20 12:23:29

标签: java enums

美好的一天, 我有一个编写Java枚举的任务,该枚举表示字母A到F。

如果一切顺利,请使用以下代码:

A(true), B(true),  C(true), D(true), E(true), F(false);

布尔值表示学生是通过还是失败。

问题是我们需要包括正负等级。但我不知道如何构建它... A +等不起作用。

非常感谢任何建议或帮助。

4 个答案:

答案 0 :(得分:3)

А+不起作用,因为+是Java中的运算符。

更好地添加更多等级,例如:

A_PLUS(true), A_MINUS(true), .... , F_PLUS(false);

答案 1 :(得分:0)

正如Kocko回答的那样,你无法使用A+,因为+是java中的运算符,但是你可以覆盖toString()方法,这样你就可以为枚举类型提供一些有意义的表示。

如果您希望使用A+方法,可以使用A_PLUS之类的字符串表示形式来枚举toString。详细了解enumeration in java

答案 2 :(得分:0)

您将使用枚举模式。它也适用于普通类,Java枚举只是一个syntactic sugar

首先是类解决方案,因此您可以对其进行比较。

public class Grade {
    final public static Grade A = new Grade(true, "A");
    final public static Grade A_PLUS = new Grade(true, "A+");
    final public static Grade A_MINUS = new Grade(true, "A-");
    ...
    final public static Grade E = new Grade(true, "E");
    final public static Grade F = new Grade(false, "F");

    final private boolean passed;
    final private String name;

    // private constructor - no-one can create any other instance then those above
    private Grade(boolean passed, String name) {
        this.passed = passed;
        this.name = name;
    }

    public boolean hasPassed() {
        return this.passed;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

然后进行比较枚举解决方案。您应该了解设计模式。 Enum只是更方便的语法+更可靠的可串行化,仅此而已。

public enum Grade {
    A(true),
    A_PLUS(true),
    A_MINUS(true),
    B(true),
    B_PLUS(true),
    ...
    E(true),
    F(false);

    final private boolean passed;

    private Grade(boolean passed) {
        this.passed = passed;
    }

    public boolean hasPassed() {
        return this.passed;
    }

    // Thanks to special bonus functionality of enums, which are aware of their name
    @Override
    public String toString() {
        final String name = name();
        if (name.contains("PLUS")) {
            return name.charAt(0) + "+"; 
        }
        else if (name.contains("MINUS")) {
            return name.charAt(0) + "-"; 
        }
        else {
            return name;
        }
    }

}

答案 3 :(得分:0)

尽量使用如下所示的课程 注意:这是访问成绩的简便方法。

public class Grade {
    private Long id;
    // this will be the upper case store and read
    private String grade;
}