Java 如何生成数字以确定加权比赛赢家

Java 如何生成数字以确定加权比赛赢家,java,jakarta-ee,random,Java,Jakarta Ee,Random,我需要找到一种选择胜利者的方法,比如比赛。每个参赛者都有获胜的机会 比如说 A - 25% chance to win B - 10% chance to win C - 25% chance to win D - 10% chance E - 10% chance F - 20% chance 1) 我需要随机挑选获胜者,但需要考虑权重 2) 我还需要选择第二个最有可能的赢家和第三个 我可以通过在1-100之间生成一个随机的赢家来选择第一个,基本上在参赛者中分成100,这取决于以下机会: A

我需要找到一种选择胜利者的方法,比如比赛。每个参赛者都有获胜的机会

比如说

A - 25% chance to win
B - 10% chance to win
C - 25% chance to win
D - 10% chance
E - 10% chance
F - 20% chance
1) 我需要随机挑选获胜者,但需要考虑权重

2) 我还需要选择第二个最有可能的赢家和第三个

我可以通过在1-100之间生成一个随机的赢家来选择第一个,基本上在参赛者中分成100,这取决于以下机会:

A = 1-25
B = 26 -35
C = 36-60.
etc
etc
不知道上面的稳定性如何,但似乎还可以

还有什么想法吗?

公共类比赛优胜者{
public class RaceWinners{
    public static void main(String[] args) {
        int[] percentages = {25,10,25,10,10,20};
        System.out.print(pickWinner(percentages));
    }

    //Returns the index of the winner(A = 0, B = 1, ...)
    private static int pickWinner(int[] percentages) {
        int randomNumber = (int)(Math.random() * 100);
        int countdown = randomNumber;
        for(int i = 0; i < percentages.length; i++) {
            countdown -= percentages[i];
            if(countdown < 0) {
                return i;
            }
        }
        return -1;
   }

}
公共静态void main(字符串[]args){ int[]百分比={25,10,25,10,10,20}; 系统输出打印(百分比); } //返回获胜者的索引(A=0,B=1,…) 私有静态整数选择器(整数[]百分比){ int randomNumber=(int)(Math.random()*100); 整数倒计时=随机数; 对于(int i=0;i
以确定您可以按照所述操作的第一级。但是对于第二,第三,。。。位置稍有不同(如果A是第一个,那么B有可能是第二个p(B | A):=“如果第一个是A,那么第二个是B”,那么B不是10%是第二个,而是一个不同的值是第二个,对于其他成员如此)。看看条件概率(wiki:)

这是一个做这项工作的“伪代码”

Ranking:
begin probability
a = 20%
b = 10%
...

calculate first
recalculate probability given that first is X (e.g. if first is A p(B|A), p(C|A),...)
calculate second (with the new probability, e.g. b = p(B|A), c = p(C|A),..)
recalculate probability given that first is X and second is Y
calculate third
etc..

注意:JavaRandom(Math.random)生成的值介于0和0.999999之间。。。(例如[0,1[0包括在内,但1不包括在内)

似乎你已经找到了问题的答案。请记住,大多数随机数都是以零为基础的。有人已经解决了这个问题。我认为这个算法有点偏袒赛车手,他们在数组
百分比
中处于起始位置。例如,第三个和第一个元素的概率应该相等随机选取g,但此算法将有利于第三个成员。但是,如果我们也随机选取
i
的值,则此问题可以解决。如果确认赢了(可能是在程序的第二次运行期间),则条件概率将出现在图中,否则在第一次尝试中计算的概率应该是可以的。@Aditya当然,第一次尝试是可以的。但是对于其他人(确定第二次、第三次…等等,第一次是A、B还是C…)你必须使用条件概率。@damoiser-我同意,我最终做的是在确定胜利者之后。我重新计算了每个参赛者的概率,然后继续寻找下一个参赛者来完成。