java——抽奖(根据随机值进行抽奖,根据执行范围进行抽奖)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wild46cat/article/details/82320610

如题

下面上货。

需求是这样的,根据不同的概率抽出不同的奖金。

例如:

2%的概率为8

3%的概率为5

5%的概率为3

90%的概率为2

package com.example.demo.demo;

public class LuckyMachine {
    private static int[] money = {8, 5, 3, 2};
    private static double[] probablity = {0.02, 0.03, 0.05, 0.9};
    public static double[] realprobablity;

    static {
        realprobablity = new double[probablity.length + 1];
        realprobablity[0] = 0;
        for (int i = 1; i < realprobablity.length; i++) {
            realprobablity[i] = realprobablity[i - 1] + probablity[i - 1];
        }
    }

    public static int runLuckyMachine() {
        double k = Math.random();
        System.out.println(k);
        int res = 0;
        for (int i = 0; i < realprobablity.length - 1; i++) {
            double vp = realprobablity[i];
            double vn = realprobablity[i + 1];
            if (vp <= k && k < vn) {
                res = money[i];
                break;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        for (int i = 0; i < realprobablity.length; i++) {
            double v = realprobablity[i];
            System.out.println(v);
        }
        System.out.println("=====================");
        int a1 = 0;
        int a2 = 0;
        int a3 = 0;
        int a4 = 0;
        for (int i = 0; i < 1000000; i++) {
            int tmp = runLuckyMachine();
            System.out.println(tmp);
            if (tmp == 2) {
                a1++;
            }
            if (tmp == 3) {
                a2++;
            }
            if (tmp == 5) {
                a3++;
            }
            if (tmp == 8) {
                a4++;
            }
        }
        System.out.println("a1:" + a1);
        System.out.println("a2:" + a2);
        System.out.println("a3:" + a3);
        System.out.println("a4:" + a4);
    }

同样还有依据指定范围进行的:

15% 的概率40-60

30%的概率61-88

40%的概率89-94

15%的概率95-99

package com.example.demo.demo;

import java.util.*;

public class LuckyMachineV2 {
    private static Integer[][] valueArray = {{40, 60}, {61, 88}, {89, 94}, {95, 99}};
    private static double[] probablity = {0.15, 0.3, 0.4, 0.15};
    private static double[] realprobablity;

    static {
        realprobablity = new double[probablity.length + 1];
        realprobablity[0] = 0;
        for (int i = 1; i < realprobablity.length; i++) {
            realprobablity[i] = realprobablity[i - 1] + probablity[i - 1];
        }
    }

    public static List<Integer> runLuckyMachine() {
        double k = Math.random();
        System.out.println(k);
        Integer[] res = null;
        int type = 0;
        for (int i = 0; i < realprobablity.length - 1; i++) {
            double vp = realprobablity[i];
            double vn = realprobablity[i + 1];
            if (vp <= k && k < vn) {
                type = i;
                res = valueArray[i];
                break;
            }
        }
        List<Integer> list = new ArrayList<>();
        if (res != null) {
            list = new ArrayList<>(Arrays.asList(res));
            list.add(type);
        }
        return list;
    }

    public static void main(String[] args) {
        Set<Integer> typeSet = new HashSet<>();
        typeSet.add(0);
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        List<Integer> list3 = new ArrayList<>();
        List<Integer> list4 = new ArrayList<>();
        while (typeSet.size() == 1) {
            typeSet.clear();
            list1.clear();
            list2.clear();
            list3.clear();
            list4.clear();
            list1 = runLuckyMachine();
            list2 = runLuckyMachine();
            list3 = runLuckyMachine();
            list4 = runLuckyMachine();
            System.out.println(list1);
            System.out.println(list2);
            System.out.println(list3);
            System.out.println(list4);
            typeSet.add(list1.get(2));
            typeSet.add(list2.get(2));
            typeSet.add(list3.get(2));
            typeSet.add(list4.get(2));
            System.out.println("typeSet is " + typeSet);
        }
        int r1 = (int) (Math.random() * (list1.get(1) - list1.get(0))) + list1.get(0);
        int r2 = (int) (Math.random() * (list2.get(1) - list2.get(0))) + list2.get(0);
        int r3 = (int) (Math.random() * (list3.get(1) - list3.get(0))) + list3.get(0);
        int r4 = (int) (Math.random() * (list4.get(1) - list4.get(0))) + list4.get(0);
        System.out.println(r1);
        System.out.println(r2);
        System.out.println(r3);
        System.out.println(r4);
    }

}

猜你喜欢

转载自blog.csdn.net/wild46cat/article/details/82320610