用java编写抽奖系统
时间: 2023-11-27 08:02:58 浏览: 70
一个简单的抽奖系统可以由以下几个组件组成:
1. 奖品库:存储所有可以抽到的奖品及其数量。
2. 参与人员列表:存储所有参加抽奖的人员信息。
3. 抽奖规则:定义每次抽奖的规则,比如每个人只能中一次奖、是否允许重复中奖等等。
4. 抽奖记录:记录每次抽奖的结果。
下面是一个简单的 Java 代码实现:
```java
import java.util.*;
public class LotterySystem {
private Map<String, Integer> prizePool; // 奖品库
private List<String> participantList; // 参与人员列表
private int maxWinCount; // 每人最多中奖次数
private boolean allowRepeatedWin; // 是否允许重复中奖
private List<LotteryRecord> lotteryRecords; // 抽奖记录
public LotterySystem(int maxWinCount, boolean allowRepeatedWin) {
this.maxWinCount = maxWinCount;
this.allowRepeatedWin = allowRepeatedWin;
this.prizePool = new HashMap<>();
this.participantList = new ArrayList<>();
this.lotteryRecords = new ArrayList<>();
}
public void addPrize(String prizeName, int quantity) {
prizePool.put(prizeName, quantity);
}
public void addParticipant(String participantName) {
participantList.add(participantName);
}
public void draw() {
Collections.shuffle(participantList); // 随机打乱参与人员列表
for (String participant : participantList) {
if (lotteryRecords.stream().filter(lr -> lr.getParticipantName().equals(participant)).count() < maxWinCount) { // 检查是否超过最大中奖次数
String prizeName = drawPrize();
if (prizeName != null) {
lotteryRecords.add(new LotteryRecord(participant, prizeName));
System.out.println(participant + " 中了 " + prizeName);
if (!allowRepeatedWin) {
prizePool.compute(prizeName, (k, v) -> v - 1); // 如果不允许重复中奖,将奖品数量减一
}
}
}
}
}
private String drawPrize() {
List<String> availablePrizes = new ArrayList<>();
for (Map.Entry<String, Integer> entry : prizePool.entrySet()) {
if (entry.getValue() > 0) {
availablePrizes.add(entry.getKey());
}
}
if (availablePrizes.isEmpty()) {
return null;
} else {
return availablePrizes.get(new Random().nextInt(availablePrizes.size()));
}
}
public static void main(String[] args) {
LotterySystem lotterySystem = new LotterySystem(1, true);
lotterySystem.addPrize("一等奖", 1);
lotterySystem.addPrize("二等奖", 2);
lotterySystem.addPrize("三等奖", 3);
lotterySystem.addParticipant("张三");
lotterySystem.addParticipant("李四");
lotterySystem.addParticipant("王五");
lotterySystem.draw();
}
}
class LotteryRecord {
private String participantName;
private String prizeName;
public LotteryRecord(String participantName, String prizeName) {
this.participantName = participantName;
this.prizeName = prizeName;
}
public String getParticipantName() {
return participantName;
}
public String getPrizeName() {
return prizeName;
}
}
```
这个抽奖系统实现了以下功能:
1. 可以添加奖品和参与人员。
2. 可以定义每人最多中奖次数和是否允许重复中奖。
3. 每次抽奖会随机打乱参与人员列表,按顺序检查每个人是否可以中奖。
4. 如果该人员还没有超过最大中奖次数,则随机抽取一个奖品,并将抽奖记录加入列表。
5. 如果不允许重复中奖,则将中奖奖品的数量减一。
6. 最后输出所有中奖记录。
阅读全文