我正在尝试想一个优雅的方法来用Java解决这个问题:
给定一个 0-100 的整数,这是将其转换为枚举的优雅方法,其中枚举的每个可能值对应于一个整数范围。
例如
enum grades{
A -> 90-95%
B -> 85-90%,
C -> 75-85%
...
etc
}
Run Code Online (Sandbox Code Playgroud)
有人能想出一种简洁的方法来编写一个给定 int 返回成绩枚举或抛出 IllegalArgumentException 的方法吗?
编写一个静态方法,就像valueOf()已经存在的那样,称之为inRange()return Grade。
public enum Grade {
A(100, 90), B(89, 80), C(79, 70);
int uBound;
int lBound;
Grade(int uBound, int lBound){
...
}
public static Grade inRange(int percent){
...
}
}
Run Code Online (Sandbox Code Playgroud)
最好将 static map、百分比初始化为键,将 Grade 初始化为值。在这种情况下,我建议您使用 apache commons 集合MapUtils。下面是一个例子,
private static final Map<Integer, Grade> GRADE_MAP = UnmodifiableMap.decorate(
MapUtils.putAll(new HashMap<Integer, Grade>(), new Object[][]{
{0, F}, {1, F}, .....,
.....
.....
{100, A}
}));
Run Code Online (Sandbox Code Playgroud)
那么你的方法将如下所示,
public static Grade inRange(int percent){
return GRADE_MAP.get(percent);
}
Run Code Online (Sandbox Code Playgroud)