【发布时间】:2017-07-13 14:28:14
【问题描述】:
例如,给我一个号码3。然后我必须从 0 到 3 中选择一个随机数,但其中 0 被选中的机会比 1 大,1 被选中的机会比 2 大,2 被选中的机会比 3 大。
我已经知道,通过执行以下操作可以实现从 0 到 3 选择特定数字的百分比机会:
double r = Math.random();
int n = 0;
if (r < 0.5) {
n = 0;
// 50% chance of being 0
} else if (r < 0.8) {
n = 1;
// 30% chance of being 1
} else if (r < 0.95) {
n = 2;
// 15% chance of being 2
} else {
n = 3;
// 5% chance of being 3
}
问题是3 可以是任何东西。我该怎么做?
注意:数字 0.5、0.8 和 0.95 是我任意选择的。我希望这些数字会减少,以便它们的总和等于 1,并且如果以某种方式可能的话,它们都不相同。
【问题讨论】:
-
如果给定的数字是 10,你会期望什么?您是如何选择 0.5、0.8 和 0.95 的数字的?
-
这些数字是我随机选择的。如果以某种方式可能的话,我可能希望它能够均匀分布。 @assylias
-
我对你所说的均匀分布的数字的意思有点困惑——这不是意味着每个数字都具有相同的被选中概率吗?既然如此,那它和普通的随机性有什么区别呢?至少,这会导致均匀分布(平均而言),这似乎首先违背了权重的目的。
-
显然只是随便举个例子。 “均匀”可以表示“相同的百分比”或“相同的绝对数量”。
标签: java random percentage