【发布时间】:2021-10-08 19:44:58
【问题描述】:
首先,我目前使用的取1-45范围内的随机数的方法是:
public int getRandomNumber(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
我想做的是,假设一个int数组中有六个数字
int[] numbers = [2, 4, 6, 8, 10, 12];
我想增加从 1 ~ 45 范围内随机生成的数字中选择数组中数字的概率(大约 20% 到 30%)。
有没有办法解决这个问题?
谢谢。
【问题讨论】:
-
你所说的“那个数字”是指哪个数字?
-
实现它的一种方法:将范围分成
numbers数组和范围内其他数字的数组。然后首先执行nextDouble(),如果是< 0.3,则从numbers中选择一个随机元素。如果是> 0.7,您可以选择其他任何号码。这样,从numbers获得号码的几率为 30%。 -
@Zabuzard 你的方法很好,但是 0.3 太大了。即使将单个 p 提高 30%,半打值也不占概率的 30%。通过求解关系
6*(1.3*p) + 39*p = 1找到正确的比例,即应选择1/6 时间的子集和5/6 时间的其余部分。 -
@pjs 我假设选择一个特殊数字的概率应该是 30%。您假设概率应该比其他任何概率高 30%。我将把它作为练习留给读者去理解。
标签: java algorithm random probability