我有一些Java代码。在我的代码中,我有一组用户。每个用户都有“赢”集合的百分比,因为集合中每个用户的机会总和为100.要选择胜利者,我按升序对集合(这是一个数组)进行排序。我的问题是根据排序的数组选择胜利者。这就是我的尝试:
public Bet getWinner() {
double random = Math.random() * 100;
Bet[] copy = Arrays.copyOf(getBets(), bets.size());
Arrays.sort(copy);
for (Bet bet : copy) {
if (random < getChance(bet)) {
return bet;
}
}
return null;
}
public float getChance(Bet bet) {
return (bet.getAmount() / getJackpotTotal()) * 100;
}
public float getJackpotTotal() {
float total = 0;
for (Bet bet : getBets()) {
total += bet.getAmount();
}
return total;
}
但该集合中有两个用户,一个有10%的获胜机会,另一个有90%,如果random
是&gt; 90,getWinner
返回null
。我怎么能这样做?有没有办法根据百分比创建随机分布,还是有更简单或不同的东西?
感谢您的帮助。
编辑
这不是重复,因为它没有具体询问加权随机数。它要求从随机数中选择一些(不是随机数)。
答案 0 :(得分:2)
你需要考虑总结的机会。如果一个玩家有机会90和一个10,那么你先比较&lt; 90然后&lt; 90 + 10.
答案 1 :(得分:1)
添加一个变量,该变量保留到目前为止已经完成的总赔率:
int total = 0;
for (Bet bet : copy) {
if (random < total + getChance(bet)) {
return bet;
}
total += getChance(bet);
}
你的命名约定有点含糊不清,所以我希望你能得到这个想法,即使我的名字可能有些不准确。