在Java中用掷骰子掷出6的机会更大

时间:2013-06-07 20:43:15

标签: java algorithm probability dice

我想知道如何编制一个有更大机会掷骰6的骰子? 我已经尝试了所有的东西,但我只是无法计算算法。 六个概率由用户给出。

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

3 个答案:

答案 0 :(得分:3)

我建议使用基于百分比的方案。让用户选择六的概率,在这个例子中可以说是30%。然后选择0-1.0之间的随机数(这是java的Random#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;
}

答案 1 :(得分:2)

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

相同的概率是三倍。从1-8获取随机数:6,7和8成为6。

答案 2 :(得分:2)

当你将六个概率大小分成5个相等的区域并将这些区域分配给1 - 5时,除去间隔(0,1)的剩余部分:

/**
 * @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);
  }
}