java语言实现权重随机算法完整实例

  

前言   

现在应用就是雨后春笋,嗖嗖的往外冒啊,有经验的,没经验的,有资历的,没资历的都想着创业,创业的90%以上都要做一个软件出来,好像成了创业的标配。

  

做了应用程序就得推广啊,怎么推,发券送钱是最多用的被不可少的了,现在好多产品或者运营都要求能够随机出优惠券的金额,但是呢又不能过于随机,送出去的券都是钱吗,投资人的钱,是吧。

  

所以,在随机生成的金额中就要求,小额度的几率要大,大额度的几率要小,比如说3元的70%,5块的25%,10块的5%,这个样子的概率去生成优惠券,这个怎么办呢?

  

对于上述的问题,直接用我们的随机的。next(整数范围内),就不够了,因为这个伪随机不带权重,3、5、10出现的概率都是一样的。

  

实现思路

  

还是拿上述的例子,3出现的概率是70%,我们给他的权重赋值为70,5出现的概率为25%,我们给他的权重赋值为25岁,10出现的概率为5%,我们给他的权重赋值为5 .

  

我们按照顺序计算出权重的加和,把当前数字出现的权重加和前的值作为其权重范围的起点值,把加和后的值作为其权重范围的终点值。

  

癹ava语言实现权重随机算法完整实例"

  

这样的话,我们就可以使用Random.next(100)来做随机数,然后判断随机数落在的范围,然后映射到对应的优惠券数值即可。

  

java实现         包com.nggirl.test.weight.random;   进口java.util.ArrayList;   进口java.util.HashMap;   进口并不知道;   进口java.util.Random;   公开课WeightRandom {   公共静态void main (String [] args) {   WeightRandom wr=new WeightRandom ();   或者说是。initWeight(新String [] {   “1”、“2”、“3”、“4”   }   ,新的整数[]{   100100200600年   }   );   随机r=新的随机();   for (int i=0;我& lt;10;我+ +){   整数房车=r.nextint (wr.getMaxRandomValue ());   System.out.println (rv);   System.out.println (wr.getElementByRandomValue (rv) .getKey () + " " + rv);   }   Integer> HashMap<字符串;keyCount=new HashMap<字符串,Integer> ();   keyCount。put (" 1 ", 0);   keyCount。(" 2 ",0);   keyCount。(“3”,0);   keyCount。(“4”,0);   for (int i=0;我& lt;10000;我+ +){   整数房车=r.nextint (wr.getMaxRandomValue ());   字符串键=wr.getElementByRandomValue (rv) .getKey ();   keyCount。把(关键,keyCount.get(键).intValue () + 1);   }   System.out.println (" ");   }   私人ListweightElements;   公共空间initWeight (String[]键,整数[]权重){   如果(键==null | |权重==null | |钥匙。长度!=weights.length) {   返回;   }   weightElements=new ArrayList ();   for (int i=0;ijava语言实现权重随机算法完整实例