等级的Java枚举

等级的Java枚举,java,enums,Java,Enums,大家好, 我有一个任务要写一个Java枚举,它表示字母等级a到F 如果一切正常,我使用以下代码: A(true), B(true), C(true), D(true), E(true), F(false); 布尔值指示学生是通过还是失败 问题是我们需要包括加分和减分。但我不知道如何组织它…A+等不起作用 任何建议或帮助都将不胜感激。А+不起作用,因为+是Java中的操作员 最好再加几个等级,比如: A_PLUS(true), A_MINUS(true), .... , F_PLUS(fals

大家好, 我有一个任务要写一个Java枚举,它表示字母等级a到F

如果一切正常,我使用以下代码:

A(true), B(true),  C(true), D(true), E(true), F(false);
布尔值指示学生是通过还是失败

问题是我们需要包括加分和减分。但我不知道如何组织它…A+等不起作用


任何建议或帮助都将不胜感激。

А+
不起作用,因为
+
是Java中的操作员

最好再加几个等级,比如:

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

正如Kocko所回答的,您不能使用
A++
,因为
++
是java中的运算符,但您可以重写
toString()
方法,以便为枚举类型提供一些有意义的表示


如果需要,可以使用
toString
方法为enum
a_PLUS
使用类似
a+
的字符串表示。了解有关的更多信息您将使用枚举模式。它也适用于普通类,Java枚举只是一个示例

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

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;
    }
}
然后比较枚举解决方案。您应该了解设计模式。枚举只是更方便的语法+更可靠的可序列化性,仅此而已

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;
        }
    }

}

我们试着使用下面的类 注:这是访问成绩的简单方法

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

A+等不起作用。它到底是如何不起作用的?为什么需要为每个等级提供一个布尔值?我的意思是,分数将与一个学生相关联,例如,班级学生将有一个类型为a或B的属性。如果你理解我,那么a的属性不会是假的,B的属性不会是真的!请查看下面我的解决方案,并对所使用的模式进行更多解释。