美好的一天, 我有一个编写Java枚举的任务,该枚举表示字母A到F。
如果一切顺利,请使用以下代码:
A(true), B(true), C(true), D(true), E(true), F(false);
布尔值表示学生是通过还是失败。
问题是我们需要包括正负等级。但我不知道如何构建它... A +等不起作用。
非常感谢任何建议或帮助。
答案 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;
}