我想知道如何编写一个更有机会掷出 6 的骰子?我已经尝试了一切,但我无法弄清楚算法。六的概率由用户给出。
我现在只是不知道如何编程random
使用给定的概率来滚动 6 或 1-5。
我想知道如何编写一个更有机会掷出 6 的骰子?我已经尝试了一切,但我无法弄清楚算法。六的概率由用户给出。
我现在只是不知道如何编程random
使用给定的概率来滚动 6 或 1-5。
我建议使用基于百分比的方案。让用户选择一个六的概率,在这个例子中让我们说 30%。然后在 0-1.0 之间选择一个随机数(这是 javaRandom#nextFloat
所做的)。如果它低于或等于.3
,则将其设为 6,否则将其设为 1-5。
Random r = new Random();
float probability = r.nextFloat(); // get a value between 0 and 1
if (probability < probabilityOfSix){
return 6;
} else {
return r.nextInt(4) +1;
}
假设 6 出现的概率是两倍。获取一个从 1 到 7 的随机数,如果你的结果是 6 或 7,那么你有一个 6。
相同的概率是三倍。从 1-8 中获取一个随机数:6、7 和 8 变为 6。
将区间 (0,1) 的剩余部分取出,将概率大小为 6 的区域分成 5 个相等的部分,并将这些区域分配给 1 - 5:
/**
* @param pSix probability that a six is returned
* @param rnd Random instance
* @return a random integer between 1 and 6 with 1-5 equiprobable and P(6) = pSix
*/
public int loadedDice(final double pSix, final Random rnd) {
final double pOther = (1d - pSix) / 5d;
final float val = rnd.nextFloat();
if (val < pSix) {
return 6;
}
return (int) Math.ceil((val - pSix) / pOther);
}
}