zoukankan      html  css  js  c++  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

  • 相关阅读:
    leecode练习--804、唯一摩尔斯密码词
    leecode练习--832、翻转图像
    leecode练习--561、数组拆分Ⅰ
    leecode练习--942、增减字符串匹配
    第二十篇 编程语言分类
    《英语学习》记录
    《视频笔记》记录
    《爬虫》爬取可用的免费IP
    《读书笔记》记录
    数据结构与算法之美
  • 原文地址:https://www.cnblogs.com/moxiaotao/p/13052189.html
Copyright © 2011-2022 走看看