前言
现在应用就是雨后春笋,嗖嗖的往外冒啊,有经验的,没经验的,有资历的,没资历的都想着创业,创业的90%以上都要做一个软件出来,好像成了创业的标配。
做了应用程序就得推广啊,怎么推,发券送钱是最多用的被不可少的了,现在好多产品或者运营都要求能够随机出优惠券的金额,但是呢又不能过于随机,送出去的券都是钱吗,投资人的钱,是吧。
所以,在随机生成的金额中就要求,小额度的几率要大,大额度的几率要小,比如说3元的70%,5块的25%,10块的5%,这个样子的概率去生成优惠券,这个怎么办呢?
对于上述的问题,直接用我们的随机的。next(整数范围内),就不够了,因为这个伪随机不带权重,3、5、10出现的概率都是一样的。
实现思路
还是拿上述的例子,3出现的概率是70%,我们给他的权重赋值为70,5出现的概率为25%,我们给他的权重赋值为25岁,10出现的概率为5%,我们给他的权重赋值为5 .
我们按照顺序计算出权重的加和,把当前数字出现的权重加和前的值作为其权重范围的起点值,把加和后的值作为其权重范围的终点值。
这样的话,我们就可以使用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;i java语言实现权重随机算法完整实例