根据计算的概率选择“赢家”

时间:2021-02-13 22:35:52

标签: java

首先,我是 Java 编码新手。我正在编写一个程序,该程序计算总和为 100% 的随机概率。 例如: 参与者 1:20% 的机会获胜。 参与者 2:25% 的机会获胜。 参与者 3:45% 的机会获胜。 参与者 4:10% 的机会获胜。

我实际上如何挑选获胜者? 我的猜测是检查一个随机数(0-100)是否位于一个间隔之间。 例如:参与者 1 的范围在 0 到 20 之间。 参与者 2 的范围在 20 到 45 之间,依此类推。

但是我如何在 Java 中实际实现它? 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

一种方法是,使用伪随机生成器 (Math.random()) 并让它生成一个介于 0 和 1 之间的浮点数。然后将其乘以 100 以进入 0 到 100 的范围。如果此最终值小于机会的百分比,则参与者将获胜。

答案 1 :(得分:0)

一个很好的解决方案是将参与者放在独家 plages 中([1, 20]; [21, 45]; [46, 90] 和 [91, 100]),选择一个随机数并选择落下的参与者内部:

        Random r = new Random();
        int randomNumber = r.nextInt(100) + 1;
        
        Map<String, Integer> map = new HashMap<String, Integer>() {{
            put("Alice", 20);
            put("Juan", 25);
            put("Michael", 10);
            put("Natasha", 45);
        }};
        
        String winner = "";
        int currentPlage[] = {0, 0};
        for (String participant : map.keySet()) {
            currentPlage[0] = currentPlage[1] + 1;
            currentPlage[1] = map.get(participant) + currentPlage[0] - 1;
            
            if (randomNumber >= currentPlage[0] && 
                    randomNumber <= currentPlage[1]) {
                winner = participant;
                break;
            }
        }
        
        
        System.out.println(winner);