JAVA代码实现抽奖功能,自定义奖品以及奖品概率

JAVA代码实现抽奖功能,自定义奖品以及奖品概率

大家好,我是梦辛工作室的灵,最近做了一个抽奖功能,然后自己为了以后方便和拓展 就封装了一下,可以自定义奖品 自定义权重 和 价格等信息,还可以自由设置是否每抽到一次 减少一个奖品,下面先来看下实现效果

package com.mx.getaward;

public class Main {
	public static void main(String[] args) {

		AwardGroup awardGroup = new AwardGroup();

		awardGroup.setAutoReduce(true); // 是否每抽一次减少一个奖品
		awardGroup.addAward(new Award("奖品1", 1, 10)); // Award 分别是 奖品名称 奖品权重(个数) 奖品价格
		awardGroup.addAward(new Award("奖品2", 2, 10));
		awardGroup.addAward(new Award("奖品3", 1, 10));
		awardGroup.addAward(new Award("奖品4", 3, 10));
		
		for (int i = 0; i < 7; i++) {
			System.out.println(awardGroup.startGetAward());
		}

	}
}

在这里插入图片描述
下面是Award 类,里面就放了一些 奖品信息:

package com.mx.getaward;

public class Award {

	public Award() {

	}

	public Award(String name, int weight, int money) {
		this.name = name;
		this.weight = weight;
		this.money = money;
	}

	private String name; // 奖品名称
	private int weight; // 奖品权重
	private int money; // 奖品价值

	public String getName() {
		return name;
	}

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

	public int getWeight() {
		return weight;
	}

	public void setWeight(int weight) {
		this.weight = weight;
	}

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}

	public void reduceWeight(int reduce) {
		if (weight - reduce < 0) {
			weight = 0;
		} else {
			weight -= reduce;
		}
	}

	@Override
	public String toString() {

		return "恭喜您获得奖品 " + name + " 价值 " + money + "元";
	}

}

然后就是 奖品组类 AwardGroup

package com.mx.getaward;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class AwardGroup {

	private List<Award> awardgroup;
	private boolean isAutoReduce; // 是否自动减少数量
	private int total = 0; // 总权数

	public AwardGroup() {
		awardgroup = new ArrayList<Award>();
	}

	public boolean addAward(Award award) {
		total += award.getWeight();
		return awardgroup.add(award);
	}

	public boolean remove(Award award) {
		total -=  award.getWeight();
		return awardgroup.remove(award);
	}

	public List<Award> getAwardgroup() {
		return awardgroup;
	}

	public void setAwardgroup(List<Award> awardgroup) {
		this.awardgroup = awardgroup;
		total = 0;
		for (Award award : awardgroup) {
			total += award.getWeight();
		}
	}

	public boolean isAutoReduce() {
		return isAutoReduce;
	}

	public void setAutoReduce(boolean isAutoReduce) {
		this.isAutoReduce = isAutoReduce;
	}

	public synchronized Award startGetAward() {
		if (awardgroup == null || total <= 0)
			return null;
		Random random = new Random();
		int awardNUmber = random.nextInt(total);
		for (Award award : awardgroup) {
			if (awardNUmber + 1 - award.getWeight() > 0) {
				awardNUmber -= award.getWeight();
				continue;
			}
			if (isAutoReduce) {
				award.reduceWeight(1);
				total -= 1;
			}
			return award;
		}

		return null;
	}
}

实现原理也很简单,比如现在有 3个奖品 ,权重分别为 10 20 30,那么总数就为 60,然后我们 从0-60抽一个随机数,依次减去每个奖品的现有权重,如果小于或等于0 那么就说明抽中的为该奖品

发布了36 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41392105/article/details/104857677