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