Java中的随机数和百分比

Java中的随机数和百分比,java,random,Java,Random,我有一些Java代码。在我的代码中,我有一个用户集合。每个用户都有“赢得”收藏的百分比机会,因为收藏中每个用户的机会之和为100。要选择赢家,我将集合(一个数组)按升序排序。我的问题是根据排序后的数组选择赢家。这就是我尝试过的: public Bet getWinner() { double random = Math.random() * 100; Bet[] copy = Arrays.copyOf(getBets(), bets.size()); Arrays.s

我有一些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;
}
public Bet getWinner(){
double random=Math.random()*100;
Bet[]copy=Arrays.copyOf(getBets(),bets.size());
数组。排序(复制);
用于(下注:副本){
如果(随机<获得机会(下注)){
回注;
}
}
返回null;
}
公共浮动获得机会(下注){
返回(bet.getAmount()/getJackpotTotal())*100;
}
公共浮点GetJackPottal(){
浮动总数=0;
for(Bet-Bet:getBets()){
合计+=bet.getAmount();
}
返回总数;
}
但是集合中有两个用户,一个有10%的获胜概率,另一个有90%,如果
random
is>90,
getWinner
返回
null
。我还能怎么做?是否有一种基于百分比的随机分布的方法,或者有更简单或不同的方法

谢谢你的帮助

编辑


这不是重复的,因为它不是专门询问加权随机数。它要求从随机数中选择某物(不是随机数)。

< P>你需要考虑总结的机会。如果一个玩家有90次机会和10次机会,那么你首先比较<90次机会,然后比较<90+10次机会。

添加一个变量,该变量保持你迄今为止所经历的总几率:

int total = 0;
for (Bet bet : copy) {

    if (random < total + getChance(bet)) {
        return bet;
    }
    total += getChance(bet);
}
int-total=0;
用于(下注:副本){
如果(随机<总数+获得机会(下注)){
回注;
}
总计+=获得机会(下注);
}

您的命名约定有点模棱两可,因此我希望您能理解,即使我对专有名称的理解可能有点不准确。

好吧,在意识到这是我所要做的一切之后,请原谅,我要退出数学课程了。但是谢谢你的帮助,不客气。现在我在工业界,我没有太多机会炫耀我的数学博士学位;-)对于
n
-第个用户,总结从用户
0
n
的所有概率(根据定义,这保证介于
0
1
之间)。如果这个总和是@pjs的
可能的重复:不是重复,因为它不是专门询问加权随机性,而是从百分比中选择某个东西也许你更喜欢这个:这肯定是一个以前已经回答过的问题。与这个问题不同,这是使用均匀分布@pjsyes提问,我肯定可以写名字。但是你的代码很有意义,谢谢你的回答!