0

我想知道如何编写一个更有机会掷出 6 的骰子?我已经尝试了一切,但我无法弄清楚算法。六的概率由用户给出。

我现在只是不知道如何编程random使用给定的概率来滚动 6 或 1-5。

4

3 回答 3

3

我建议使用基于百分比的方案。让用户选择一个六的概率,在这个例子中让我们说 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;
}
于 2013-06-07T20:54:46.267 回答
2

假设 6 出现的概率是两倍。获取一个从 1 到 7 的随机数,如果你的结果是 6 或 7,那么你有一个 6。

相同的概率是三倍。从 1-8 中获取一个随机数:6、7 和 8 变为 6。

于 2013-06-07T20:48:27.680 回答
2

将区间 (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);
  }
}
于 2013-06-07T22:13:27.070 回答