美文网首页
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