我想知道如何编制一个有更大机会掷骰6的骰子? 我已经尝试了所有的东西,但我只是无法计算算法。 六个概率由用户给出。
我现在不知道如何编程使用给定概率滚动6或1-5的random
。
答案 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);
}
}