Dict.CN 在线词典, 英语学习, 在线翻译

都市淘沙者

荔枝FM Everyone can be host

统计

留言簿(23)

积分与排名

优秀学习网站

友情连接

阅读排行榜

评论排行榜

递归实现类似腾讯的积分等级处理 (原创)

由于最近做积分系统刚好需要一个类似腾讯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[] = 501003005001000 };
        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的头衔#

通过其他方法对返回的串做处理即可,有好方法的朋友欢迎沟通!!

posted on 2008-01-15 23:40 都市淘沙者 阅读(486) 评论(0)  编辑  收藏 所属分类: Java Basic/Lucene/开源资料


只有注册用户登录后才能发表评论。


网站导航: