由于最近做積分系統剛好需要一個類似騰訊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的頭銜#
通過其他方法對返回的串做處理即可,有好方法的朋友歡迎溝通!!