首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择随机数范围内,但加权的一个部分的范围?(用Java)

如何选择随机数范围内,但加权的一个部分的范围?(用Java)
EN

Stack Overflow用户
提问于 2012-03-30 17:28:08
回答 4查看 4.7K关注 0票数 3

我想选择随机数范围内的数字,但加权接近该范围的一部分。例如:

  1. 在1-10
  2. 权重之间选择随机数,这样1-5比6-10

高出20%。

这个是可能的吗?我该怎么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-30 17:42:25

这取决于你希望你的概率分布看起来像什么。

例如:

代码语言:javascript
运行
复制
Pick a random number between 1-10
If it is <= 6
    Return a random number between 1-5
Else
    Return a random number between 6-10
EndIf

选择一个数字在1-5 60%的时间和一个数字在6-10 40%的时间。

票数 11
EN

Stack Overflow用户

发布于 2012-03-30 18:37:52

若要生成概率的钟形曲线,请滚动和和多个骰子。然后减去平均数。如果结果为负值,请重滚。掷的骰子越多,重量越重。

有一种方法,完全未经测试。

代码语言:javascript
运行
复制
float sum;
do {
   sum = rollThreeDice(); // returns 3 to 18, with an average is 10.5
   sum -= 10.5;           // Now the range is 0 to 7.5, with the lower end being more likely.
   } while(sum < 0);
return sum;

当然,您可以滚动骰子与任何数目的边,以产生所需的范围。您可以通过选择骰子数量来控制频率曲线。

票数 1
EN

Stack Overflow用户

发布于 2012-03-30 17:44:24

我想到了两个解决办法。首先,随机运行两次:

代码语言:javascript
运行
复制
java.utils.Random randomGenerator = new java.utils.Random();
int random = randomGenerator.nextInt(11);
if(random <= 6) { //This is 20% more
    random = randomGenerator.nextInt(5) + 1;
} else {
    random = randomGenerator.nextInt(5) + 6;
}

或者,如果您总是有一个静态范围,您可以用数字填充数组,添加更多您想要的数字,并在数组的长度上选择一个随机数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9947685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档