奖品
public class MGood {
// ....... 其他描述字段
public int lotteryPriority;
}
抽奖逻辑
public class GoodLotteryLogic {
// 奖品仓库
private List<MGood> gifts = new LinkedList<MGood>();
private boolean unique;
public GoodLotteryLogic(List<MGood> gifts, boolean unique) {
this.unique = unique;
gifts.clear();
gifts.addAll(gifts);
Collections.shuffle(gifts);
}
// 抽奖
public synchronized MGood getGift() {
int randomNumber = (int) (Math.random() * total());
int priority = 0;
for (MGood item : gifts) {
priority += item.lotteryPriority;
if (priority >= randomNumber) {
// 从奖品库移出奖品
if (unique) {
gifts.remove(item);
}
return item;
}
}
// 抽奖次数多于奖品时,没有奖品
// return null;
return gifts.get(0);
}
// 计算总优先级
private int total() {
int result = 0;
for (MGood item : gifts) {
result += item.lotteryPriority;
}
return result;
}
}
抽奖规则:优先级规则。优先级越高抽取的概率越高