我们知道经典的范围随机函数是这样的:
public static final int random(final int min, final int max) {
Random rand = new Random();
return min + rand.nextInt(max - min + 1); // +1 for including the max
}
我想创建算法函数以在 1..10 之间的范围内随机生成数字,但可能性不均匀,例如:
1) 1,2,3 -> 3/6 (1/2)
2) 4,5,6,7 -> 1/6
3) 8,9,10 -> 2/6 (1/3)
上面的意思是函数有 1/2 的机会返回 1 到 3 之间的数字,1/6 的机会返回 4 到 7 之间的数字,以及 1/3 的机会返回 8 到 10 之间的数字。
有人知道算法吗?
更新:
实际上 1..10 之间的范围仅作为示例。我要创建的函数适用于任何数字范围,例如:1..10000,但规则仍然相同:3/6 用于顶部范围(30% 部分),1/6 用于中间范围(下一个40% 部分),底部范围的 2/6(最后 30% 部分)。