基于Java的年会抽奖程序代码 要求: 1.公司开年会有300名员工 2.一等奖 3名 奖品是苹果笔记本 3.二等奖 6名 奖品是小米手机 4.三等奖 16名 奖品是空气净化器 分批次抽奖 先抽 三等奖 再抽 二等奖 最后抽一等奖 自选两种方式 比如 抽三次 抽出三个一等奖 要求每个员工只能中奖一次
时间: 2024-03-06 10:51:09 浏览: 86
好的,以下是一个基于Java的年会抽奖程序的示例代码。在这个示例代码中,我使用了集合来存储员工信息和奖品信息,并且实现了自选抽奖次数和防止重复中奖的功能。
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
public class AnnualMeetingLottery {
// 定义员工类
static class Employee {
private String name;
private int id;
public Employee(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
}
// 定义奖品类
static class Prize {
private String name;
private int level;
public Prize(String name, int level) {
this.name = name;
this.level = level;
}
public String getName() {
return name;
}
public int getLevel() {
return level;
}
}
// 定义抽奖类
static class Lottery {
private List<Employee> employees;
private List<Prize> prizes;
private Set<Integer> winners;
public Lottery(List<Employee> employees, List<Prize> prizes) {
this.employees = employees;
this.prizes = prizes;
winners = new HashSet<>();
}
// 抽取指定等级的奖品
private void draw(int level, int count) {
System.out.println("抽取" + count + "个" + getLevelName(level) + "...");
int drawnCount = 0;
while (drawnCount < count) {
// 从员工中随机选择一个
Employee employee = employees.get(new Random().nextInt(employees.size()));
if (!winners.contains(employee.getId())) {
// 如果该员工还未中奖,则将其加入中奖名单
winners.add(employee.getId());
// 从奖品中随机选择一个
Prize prize = prizes.get(new Random().nextInt(prizes.size()));
if (prize.getLevel() == level) {
// 如果该奖品等级与指定等级相同,则将该员工与奖品信息输出
System.out.println(employee.getName() + " 中了 " + prize.getName());
drawnCount++;
}
}
}
}
// 开始抽奖
public void start(int[] drawCount) {
// 先抽取三等奖
draw(3, drawCount[0]);
// 再抽取二等奖
draw(2, drawCount[1]);
// 最后抽取一等奖
draw(1, drawCount[2]);
}
// 获取奖品等级的名称
private String getLevelName(int level) {
switch (level) {
case 1:
return "一等奖";
case 2:
return "二等奖";
case 3:
return "三等奖";
default:
return "";
}
}
}
public static void main(String[] args) {
// 初始化员工信息和奖品信息
List<Employee> employees = new ArrayList<>();
for (int i = 1; i <= 300; i++) {
employees.add(new Employee("员工" + i, i));
}
List<Prize> prizes = new ArrayList<>();
prizes.add(new Prize("苹果笔记本", 1));
prizes.add(new Prize("小米手机", 2));
prizes.add(new Prize("空气净化器", 3));
// 获取抽奖次数
Scanner scanner = new Scanner(System.in);
System.out.print("请输入抽奖次数:");
int count = scanner.nextInt();
int[] drawCount = new int[]{1, 2, 3};
if (count == 2) {
// 如果抽奖次数为2,则随机选择两个等级抽取一次
Collections.shuffle(Arrays.asList(drawCount));
drawCount = new int[]{drawCount[0], drawCount[1], 0};
} else if (count == 1) {
// 如果抽奖次数为1,则随机选择一个等级抽取一次
drawCount = new int[]{0, 0, 1};
}
// 开始抽奖
Lottery lottery = new Lottery(employees, prizes);
lottery.start(drawCount);
}
}
```
在这个示例代码中,我们使用了静态内部类来定义员工类、奖品类和抽奖类。在主程序中,我们首先初始化了员工信息和奖品信息,然后获取用户输入的抽奖次数,并且根据抽奖次数随机选择不同的等级进行抽奖。最后,我们调用抽奖类的 start 方法开始抽奖,并且输出中奖情况。
在抽奖类中,我们使用了集合来存储中奖名单,并且实现了抽取指定等级的奖品、防止重复中奖等功能。
阅读全文