java抽奖算法

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值