抽奖软件
a、通过键盘录入抽奖人姓名,多个抽奖人用“|”符号分割。输入完成后,控制台打印抽奖人姓名,并提示YES OR NO来表示确认。一旦确认,自动为抽奖人分配ID,开始抽奖。(如果出现重名,则以ID为准。)
b、奖品存放在某个集合中。
c、1等奖 1个 2等奖 3个 3等奖 4个。
d、每次抽奖均打印姓名,然后键盘输入next开始第二次抽奖。如果奖品已经抽完,则公布中奖汇总。
不再提示next。
编写程序实现以上需求。
// 定义一个中奖人类
public class LuckyDog {
private Integer id;// 中奖人的ID 建议使用包装类
private String name;// 中奖人的姓名
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LuckyDog() {
}
public LuckyDog(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "LuckyDog{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
// 定义一个类 奖品类
public class Prize {
private String name;// 奖品的名称
private String level;// 奖品的等级
private Integer count;// 奖品的数量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Prize() {
}
public Prize(String name, String level, Integer count) {
this.name = name;
this.level = level;
this.count = count;
}
@Override
public String toString() {
return "Prize{" +
"name='" + name + '\'' +
", level='" + level + '\'' +
", count=" + count +
'}';
}
}
// 定义一个中奖结果类
public class Result {
private Integer id;// id
private String username;// 中奖人的姓名
private String prizeName;// 奖品的名称
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPrizeName() {
return prizeName;
}
public void setPrizeName(String prizeName) {
this.prizeName = prizeName;
}
public Result() {
}
public Result(Integer id, String username, String prizeName) {
this.id = id;
this.username = username;
this.prizeName = prizeName;
}
@Override
public String toString() {
return "Result{" +
"id=" + id +
", username='" + username + '\'' +
", prizeName='" + prizeName + '\'' +
'}';
}
}
// 定义一个工具类
/*
完成两大功能:
1.初始化抽奖人的信息
2.初始化奖品的信息
*/
public class ToolsClass {
// 需要容器 初始化一个抽奖人的初始容器
static ArrayList<LuckyDog> list = new ArrayList<>();
//1. 定义一个静态方法 初始化抽奖人的信息
public static ArrayList<LuckyDog> initPerson() {
// 从控制台中获取
System.out.println("请输入参与抽奖人的信息,如果有多个,中间用|隔开:");
Scanner scan = new Scanner(System.in);
String strs = scan.nextLine();// 抽奖人信息
// split(String pattern) 拆分字符串为数组 pattern 模式,格式
// 非空检验
if (strs != null && !strs.equals("") && !strs.equals("null")) {
// 表明 数据是合法的安全的
String[] persons = strs.split("\\|");//
// 循环遍历persons 长度确定
for (int i = 0; i < persons.length; i++) {
// 往list容器中添加抽奖人信息
list.add(new LuckyDog((i+1),persons[i]));// LuckyDog----存储LuckyDog类型对象
}
} else {
// 如果前面输入的信息不合法 递归操作 形成循环
initPerson();
}
// 把参与抽奖人的姓名在控制台输出
// 遍历list容器
for (int i = 0; i < list.size(); i++) {
System.out.print(" "+list.get(i).getName() + " ");
}
// 把结果返回给程序
return list;
}
// 2.初始化奖品的信息
public static ArrayList<Prize> initPrize() {
//构造一个空的奖品容器
ArrayList<Prize> list = new ArrayList<>();
// 存储奖品 Prize类对象
list.add(new Prize("IPhone12", "一等奖", 1));
list.add(new Prize("华为p40 Pro", "二等奖", 3));
list.add(new Prize("富光水杯", "三等奖", 4));
return list;
}
import java.util.ArrayList;
import java.util.Scanner;
// 定义一个主程序类 启动类
public class MainProgram {
public static void main(String[] args) {
// 1.初始化抽奖人的姓名
// 2.初始化奖品的信息
// 采用面向对象编程思想 拆分代码---》把以上两大功能放进工具类中
// 直接调用ToolsClass类中initPerson()方法
ArrayList<LuckyDog> ldaList = ToolsClass.initPerson();
// 直接调用ToolsClass类中的initPrize()方法
ArrayList<Prize> prizeList = ToolsClass.initPrize();
// 构建一个Scanner类对象
Scanner scan = new Scanner(System.in);
System.out.println("请输入YES or NO:");
String str = scan.nextLine();
// 查阅API 相等判断忽视大小写
if (str.equalsIgnoreCase("NO")) {
System.out.println("此次抽奖失败");
return;// 程序结束
} else if (!str.equalsIgnoreCase("YES")) {
System.out.println("输入的数据不符合要求");
return;// 程序结束
} else {
// 程序开始抽奖
// 先构建中奖的结果容器
ArrayList<Result> results = new ArrayList<>();
// 循环 循环的次数 奖品的总数是8
while (ldaList.size() > 0 && prizeList.size() > 0) {// 循环结束条件
// 开始抽奖 随机索引 [0.0,1.0)
int index = (int) (Math.random() * ldaList.size());
// 根据索引获取对应的抽奖人
LuckyDog luckyDog = ldaList.get(index);// 抽奖人
// 奖品 倒着抽 三等奖
Prize prize = prizeList.get(prizeList.size() - 1);//奖品
// 拼接中奖结果
results.add(new Result(luckyDog.getId(), luckyDog.getName(), prize.getName()));
// 奖品的个数减1 如果该奖品的个数此时为1,把该奖删除掉
if (prize.getCount() == 1) {
// 删除对应的奖品
prizeList.remove(prize);
} else {
prize.setCount(prize.getCount() - 1);// 个数减1
}
// 删除上一轮中奖人的信息
ldaList.remove(index);// 根据索引删除对应的信息 直接删除对象
// 输出中奖的人信息
System.out.println("本次中奖人是:" + luckyDog.getName() + "本次中奖人的ID是:"
+ luckyDog.getId() + "奖品为:" + prize.getName() + "中奖等级:" + prize.getLevel() + "!");
// 再次判断人数和奖品数
if (prizeList.size() > 0 && ldaList.size() > 0) {
System.out.println("请输入next开启下一轮抽奖:");
String next = scan.next();
while (!next.equalsIgnoreCase("next")) {
System.out.println("请输入next来开启下一轮抽奖:");
// 重复判断输入的next变量值是否为"next"内容
next = scan.next();
}
}
}
// 抽奖结束
System.out.println("------------------------------------------------");
// 展示中奖汇总
System.out.println("中奖信息结果为:");
for (int i = 0; i < results.size(); i++) {
System.out.println(results.get(i).getId() + "," + results.get(i).getUsername() + ","+results.get(i).getPrizeName());
}
}
}
}