权重值设置问题

一个简单的方法根据权重,按照比例随机显示对应的广告, 权重值越大,概率越大。
比如有个广告list,广告属性有id,weight,写个通用方法来根据权重显示广告id:
public  class  TEST {
 
     public  static  void  main(String[] args) {
         List<Ad> list =  new  ArrayList<Ad>();
         list.add( new  Ad( 1 , 5 ));
         list.add( new  Ad( 2 , 10 ));
         list.add( new  Ad( 3 , 20 ));
         list.add( new  Ad( 4 , 30 ));
         list.add( new  Ad( 5 , 35 ));
         ComTest com =  new  ComTest();
         Collections.sort(list,com);  //对list中广告的权重要先排序,否则无法将随机数顺序安置到对应的区间
 
         int  id1= 0 ;
         int  id2= 0 ;
         int  id3= 0 ;
         int  id4= 0 ;
         int  id5= 0 ;
         for  ( int  i =  0 ; i <  100 ; i++) {
             int  id = getAd(list);
             if (id== 1 ) id1++;
             if (id== 2 ) id2++;
             if (id== 3 ) id3++;
             if (id== 4 ) id4++;
             if (id== 5 ) id5++;
         } //
         System.out.println( "12345:" +id1+ "|" +id2+ "|" +id3+ "|" +id4+ "|" +id5); //统计各id出现的次数
     }
     public  static  int  getAd(List<Ad> list){   //根据权重返回对应id的方法
         int  sumWeight =  0 //得到总权重
         for (Ad ad :list){
             sumWeight+=ad.getWeight();
         }
         Random rand =  new  Random();
         int  x = rand.nextInt(sumWeight) +  1 //生成随机数
         int  start =  0 int  end =  0 ;
         for ( int  i= 1 ;i<list.size();i++){
             //计算各个权重对应的起止数值段
             if (i== 1 ){
                 start = list.get(i- 1 ).getWeight();
                 end = list.get(i- 1 ).getWeight()+list.get(i).getWeight();
             } else {
                 start = end;
                 end = start+list.get(i).getWeight();
             }
             //根据随机数落入的范围返回对应几率的广告id
             if (x>start && x<=end){
                 return  list.get(i).getId();
             } else  if (x<=start){
                 return  list.get(i- 1 ).getId();
             } else {
                 continue ;
             }
         }
         return  0 ;
     }
}
         
class  Ad{
     
     public  Ad( int  id, int  weight){
         this .id = id;
         this .weight = weight;
     }
     int  id;
     int  weight;
     
     public  int  getId() {
         return  id;
     }
     
     public  void  setId( int  id) {
         this .id = id;
     }
     
     public  int  getWeight() {
         return  weight;
     }
     
     public  void  setWeight( int  weight) {
         this .weight = weight;
     }
     
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值