Java中请问转盘的概率整么控制?角度这些(谢谢!)

Java中请问转盘的概率整么控制?角度这些(谢谢!),第1张

打个比方,现在你的转盘有10种情况,分别为1-10,那么雀睁你先new一个list,长度为100,若希望1,概率为25%,则往这个list存储25个1进去,其他顷汪岁的类似,之后你再取list里面的值时,先用Collections.shuff这样一个方法去随机打乱list,再不放心,陵盯用Random类获取一个随机数,根据这个随机数去getlist里面的内容;

至于角度,布吉岛了

import java.util.HashMap

import java.util.Map

import java.util.Random

public class Test {

    // 实现思路:给每如州个key设置一个权重,权重越大被取到的概率越大,

    // 然后根据权重生成一个连续的大的数据区间,权重越大占用的区间长度越大,

    // 在这个连续的大区间中取随机数,取到的数落在哪个区间就取出该区间

    // 对应的key,从而实现了根据权重控制key获取的概率

    public static final Map<int[], String> INTERVAL = new HashMap<>()

    public static int limit = 0

    static {

        // 权重,表示配碧被选中的机会大小

        Map<String, Integer> WEIGHT = new HashMap<>()

        WEIGHT.put("a", 1)

        WEIGHT.put("b", 5)

    渣卖蔽    WEIGHT.put("c", 10)

        WEIGHT.put("d", 20)

        for (Map.Entry<String, Integer> entry : WEIGHT.entrySet()) {

            String key = entry.getKey()

            int value = entry.getValue()

            INTERVAL.put(new int[]{limit, limit + value}, key)

            limit += value

        }

    }

    // 随机获取一个key

    public static String getRandomKey() {

        // 获取一个指定范围内的随机数

        int ran = new Random().nextInt(limit)

        for (Map.Entry<int[], String> entry : INTERVAL.entrySet()) {

            int[] key = entry.getKey()

            String value = entry.getValue()

            if (ran >= key[0] && ran < key[1]) {

                return value

            }

        }

        return null

    }

    public static void main(String[] args) {

        // 随机取WEIGHT中的key,统计每个key被取到的次数

        Map<String, Integer> count = new HashMap<>()

        for (int i = 0 i < 1000000 i++) {

            String k = getRandomKey()

            if (count.containsKey(k)) {

                count.put(k, count.get(k) + 1)

            } else {

                count.put(k, 1)

            }

        }

        // 执行结果可以看出每个key取到的次数和设置的权重所占比例比较接近,

        // 取得次数越多比例越精确

        for (Map.Entry<String, Integer> entry : count.entrySet()) {

            String key = entry.getKey()

            Integer value = entry.getValue()

            System.out.println(key + ":" + value)

        }

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12540671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存