我试图想出一种在Java中解决这个问题的优雅方法:
给定0-100的int是一种优雅的方法,将其转换为枚举,其中每个枚举的可能值对应于一系列整数。
例如
enum grades{
A -> 90-95%
B -> 85-90%,
C -> 75-85%
...
etc
}
任何人都可以想到一种简洁的方法来编写一个方法,给定一个int返回一个成绩枚举或抛出一个IllegalArgumentException?
答案 0 :(得分:4)
编写一个静态方法,就像valueOf()
已经存在一样,称之为inRange()
,返回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){
...
}
}
更好地初始化静态map
,将百分比初始化为键,将等级作为值。我建议你在这种情况下使用apache commons collection 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}
}));
然后你的方法将如下所示,
public static Grade inRange(int percent){
return GRADE_MAP.get(percent);
}
答案 1 :(得分:1)
我将边界作为枚举的属性,并实现方法
public boolean isInRange(int i)
枚举中的,使用枚举的边界和边界与下一个较低的序号。
最后在枚举上实现一个静态方法,迭代实例以找到匹配的实例。
答案 2 :(得分:1)
提前创建索引为0..100的数组,并将每个插槽分配给您希望它对应的值。
然后在实际循环中查看数组中的值。