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

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

————————————————

版权声明:本文为CSDN博主「Waria」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/waria/java/article/details/78404592

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值