Java改变生成随机数的平均值(改变生成随机数的概率)

来源:互联网 发布:ssd主控测试软件 编辑:程序博客网 时间:2024/06/06 04:06

Java改变生成随机数的平均值(改变生成随机数的概率)

最近做普通商户微信发红包的接口,需求是可以发1-100元的红包,要求总红包金额的平均值为2
按照Java的random函数生成红包金额:1+  (new Random().nextFloat() * (100- 1)),均值自然在50元左右
怎么办?
恩......有了!
将红包金额分为两个区间 [1,2] , [2,100],让金额在 [1,2] 区间内出现的次数高,在 [2,100] 区间出现的次数低,这样便能拉低平均值
设在 [1,2] 区间的概率为x,那么 [2,100] 区间的概率为1-x,(小区间均值*概率)+(大区间均值*概率)=总均值
由此可得1.5 * x + 51 * (1-x) = 2,解出来 x = 0.9898......,大概是0.99啦
代码如下:
public void testRandom(){        Random random = new Random();        float rad = 0;        float money = 0;        float total = 0;        int i = 1000;        while(i>0) {            rad = random.nextFloat();            if (rad < 0.99) {                money = 1 + (random.nextFloat() * (2 - 1));            } else {                money = 2 + (random.nextFloat() * (100 - 2));                System.out.println("大于2:"+money);            }            total = total + money;            i--;        }        System.out.println("平均值:"+(total/1000));    }

测试执行1000次,生成了十个大于2的随机数,平均值为2.0012546:
大于2:4.544708
大于2:50.684223
大于2:47.64222
大于2:90.15074
大于2:72.53537
大于2:78.492485
大于2:72.61912
大于2:28.400482
大于2:66.73454
大于2:7.787241
平均值:2.0012546

O(∩_∩)O哈哈~,搞定

原创粉丝点击