由于最近做积分系统刚好需要一个类似腾讯qq等级的方式:比如一个太阳等级A表示1000分,一个月亮B表示800分,另外一个星星C表示100分;则若用户的积分为2950则是AABC表示即可,若用户积分为1950则用ABC即可,若用户积分为2150则用AAC即可,若用户积分为1150则用AC即可,以此类推,可以用递归来解决这类问题,代码如下
import java.util.ArrayList;
import java.util.List;
public class BeanShellDemo {
static StringBuffer sb = new StringBuffer();
/** *//**
* point表示用户的总积分,levellist表示积分等级列表;<br>
* 在本例子中需要说明的是积分等级列表是要按顺序的
* @param point
* @param leverlist
* @return
*/
public static String getMyLand(int point, List levellist) {
int starnum = 0;
int leftpoint = 0;
int maxlevel = Integer.parseInt(levellist.get(levellist.size() - 1)
.toString());//列表中的最大等级
int minlevel = Integer.parseInt(levellist.get(0).toString());//列表中的最小等级
if(levellist.size() > 0 && point< minlevel){
return "积分不够最小等级,则默认为最低的等级"+minlevel;
}else
if (levellist.size() > 0 && point >= minlevel) { //当用户积分小于最小等级值则不做处理
if (point < maxlevel && levellist.size() > 0) { // 小于最大等级则
levellist.remove(levellist.size() - 1); // 将当前list中的最大等级移除
leftpoint = point; //(注意因为例子中的list是由小到大排序的,乱顺则要另外处理)
} else {
starnum = point / maxlevel; //取商 比如280/6 = 46
leftpoint = point % maxlevel; //取模 比如280%6 = 4
sb.append("有" + starnum + "个等级为" + maxlevel + "的头衔" + "#");
}
getMyLand(leftpoint, levellist);
}
return sb.toString();
}
public static void main(String[] args) {
int leverarray[] = { 50, 100, 300, 500, 1000 };
List<Integer> levellist = new ArrayList<Integer>();
for (int i = 0; i < leverarray.length; i++) {
levellist.add(leverarray[i]);
}
int userpoint = 20;
int userpoint2 = 2190;
System.out.println(getMyLand(userpoint, levellist));
System.out.println(getMyLand(userpoint2, levellist));
}
}
执行结果如:
积分不够最小等级,则默认为最低的等级50
有2个等级为1000的头衔#有1个等级为100的头衔#有1个等级为50的头衔#
通过其他方法对返回的串做处理即可,有好方法的朋友欢迎沟通!!