java抽奖算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37512634/article/details/86608277
package com.zxg.lottery.server.web.demo;

import java.util.Random;

/**
 * @program: lucky
 * @author: Mr.Han
 * @create: 2019-01-16 14:47
 **/

/**
 * 抽奖算法demo
 */
public class Lucky {
    public static void main(String[] args) {
        Model m1 = new Model();
        m1.setName("1号");
        m1.setProbability(301);

        Model m2 = new Model();
        m2.setName("2号");
        m2.setProbability(208);

        Model m3 = new Model();
        m3.setName("3号");
        m3.setProbability(59);

        Model m4 = new Model();
        m4.setName("4号");
        m4.setProbability(11);

        Model[] arr = {m1,m2,m3,m4};
        //Task task = its.isTimeTask();
        int result = lucky(arr);
        System.out.println(arr[result].getName());
        arr[result].setProbability(0);
        int result2 = lucky(arr);
        System.out.println(arr[result2].getName());
        arr[result].setProbability(0);
    }
    public static int lucky(Model[] arr){
        //计算概率总和
        Integer len = 0;
        for(int i=0; i<arr.length; i++){
            len+=arr[i].getProbability();
        }
        //通过概率总和生成随机数
        Random rm = new Random();
        int random = rm.nextInt(len);
        //概率递增记录
        int b = 0;
        for(int i=0; i<arr.length; i++){
            b+=arr[i].getProbability();
            //如果随机数小于等于之前的概率总和,返回数组下标
            if(random<=b){
                return i;
            }
        }
        throw new RuntimeException("error");
    }
}

class Model{
    private String name;
    private int probability;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getProbability() {
        return probability;
    }

    public void setProbability(int probability) {
        this.probability = probability;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37512634/article/details/86608277