美文网首页
java抽奖代码

java抽奖代码

作者: 屎倒淋头还嚼便 | 来源:发表于2020-03-16 14:58 被阅读0次
public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String, Integer>();
        map.put("1万元", 1); //   0.00009 (中奖概率:1/11015)
        map.put("1100元", 4); // 0.00036
        map.put("100元", 10); // 0.0009
        map.put("10元", 1000); // 0.09
        map.put("1元", 10000); // 0.9
        // 将所有奖品乘以其中奖概率分子值,放入到奖池集合中
                // 就是所有奖品的中奖概率,先换算成分母相同,然后分子是几就是几份,
                // 这样,把所有奖品放到一个list集合中。生成随机数作为索引抽奖
                // 集合中的数据示例:{1万元,10元,10元,10元,1元...}
        List<String> jc = new ArrayList<String>();
        Set<Entry<String,Integer>> entrySet = map.entrySet();
        for(Entry<String,Integer> entry:entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            for(int i=0;i<value;i++) {
                jc.add(key);
            }
        }
        // 
        // System.out.println(jc);
        // 随机从奖池中抽奖
        int size = jc.size();
        System.out.println(size);
        int random = (int)(Math.random()*size+1);//【1,1+size)
        int index = random-1;
        String jp = jc.get(index);
        System.out.println(index);
        System.out.println(jp);
        // 查看中奖概率
        System.out.println("查看中奖概率");
        Map<String,Integer> map2 = new HashMap<String, Integer>();
        int jp11 = 0;
        int jp22 = 0;
        int jp33 = 0;
        int jp44 = 0;
        int jp55 = 0;
        for(int i=0;i<1000000;i++) {
            int random2 = (int)(Math.random()*size+1);//【1,1+size)
            int index2 = random2-1;
            String jp2 = jc.get(index2);
            if(jp2.equals("1万元")) {
                map2.put(jp2, jp11++);
            }
            if(jp2.equals("1100元")) {
                map2.put(jp2, jp22++);
            }
            if(jp2.equals("100元")) {
                map2.put(jp2, jp33++);
            }
            if(jp2.equals("10元")) {
                map2.put(jp2, jp44++);
            }
            if(jp2.equals("1元")) {
                map2.put(jp2, jp55++);
            }
        }
        System.out.println(map2);
    }

1百万次抽奖后,中奖概率基本和预想的一致

还有一种方式,相邻奖品的概率值累计,得到每个奖品的累计值(可以认为是从左到右排列,另外设置一个最左边的值为0),
然后,根据实际数据,取一个随机小数,这个小数在哪个以上排列的数据范围内,就取右边的数据,对应的奖品就中奖了

相关文章

网友评论

      本文标题:java抽奖代码

      本文链接:https://www.haomeiwen.com/subject/tzvgehtx.html