Java中的随机数和百分比

时间:2016-05-19 19:25:20

标签: java random

我有一些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。我怎么能这样做?有没有办法根据百分比创建随机分布,还是有更简单或不同的东西?

感谢您的帮助。

编辑

这不是重复,因为它没有具体询问加权随机数。它要求从随机数中选择一些(不是随机数)

2 个答案:

答案 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);
}

你的命名约定有点含糊不清,所以我希望你能得到这个想法,即使我的名字可能有些不准确。