抽奖软件
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;}@Overridepublic 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;}@Overridepublic String toString() {return "Prize{" +"name='" + name + '\'' +", level='" + level + '\'' +", count=" + count +'}';}}
// 定义一个中奖结果类
public class Result {private Integer id;// idprivate 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;}@Overridepublic 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<>();// 循环  循环的次数  奖品的总数是8while (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());}}}
}

java控制台模拟多人抽奖相关推荐

  1. Java实现模拟电梯上下楼,初学者练手

    Java实现模拟电梯上下楼 电梯需求 基于Java控制台模拟电梯上下楼 电梯先随机停在一个楼层 有人按下按钮 电梯判断几楼按的去接人,人进入电梯按下几楼 电梯判断送人 代码部分 // An highl ...

  2. java模拟三人爬山_java笔记——模拟多人徒步爬山例子

    模拟多人徒步爬山,使用多线程模拟多人徒步爬山训练要点,使用任意一种方式创建线程,使用 Thread.sleep()方法设置线程休眠.需求说明:每个线程代表一个人可设置每人爬山速度每爬完 100 米显示 ...

  3. java实现模拟消灭星星(控制台版)

    消灭星星java控制台版实现 最近喜欢玩消灭星星,打算自己弄一个出来,为了验证可能性,所以先弄了一个控制台版的来测试一下 消灭星星逻辑主要有这几个 随机生成星星 找到所有与选中的星星相邻且颜色相同的其 ...

  4. Java笔记——控制台模拟“双色球”福利彩票游戏

    Java笔记--控制台模拟"双色球"福利彩票游戏 说明:本打算重新巩固java知识并重新记录笔记,但是现在对于一个20多年的语言而言,鄙人的能力实在是提炼不出来什么精华,直接上练手 ...

  5. Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...

  6. java控制台打印乱码_java控制台输出出现乱码怎么解决

    java控制台输出出现乱码怎么解决 发布时间:2020-06-24 10:37:14 来源:亿速云 阅读:82 作者:Leah java控制台输出出现乱码怎么解决?相信很多没有经验的人对此束手无策,为 ...

  7. Java 如何模拟真正的并发请求?

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

  8. java多线程模拟购买火车票

    java多线程模拟购买火车票 本次做的是一个火车票的售卖模拟,不管用户是在窗口还是APP上购买,必然不可能买到同一张票这也就是说一张票的售卖必然是一个线程在操作的,所以,我们在写代码是也要注意这一点 ...

  9. java控制台中文乱码_java用控制台输出时出现乱码怎么办

    java用控制台输出时出现乱码怎么办 发布时间:2020-06-26 16:00:24 来源:亿速云 阅读:113 作者:Leah java用控制台输出时出现乱码怎么办?相信很多没有经验的人对此束手无 ...

最新文章

  1. bzoj 1409 Password 矩阵快速幂+欧拉函数
  2. AlarmManager与PendingIntent的联合使用(一)
  3. git submodule获取子模块
  4. Windows2008下搭建NFS实现windows空间提供linux使用
  5. 剔除异常值栅格计算器_R语言系列 数据清洗3 异常值处理
  6. HDU - 4513 吉哥系列故事——完美队形II(Manacher)
  7. 有了Unicode为啥还需要UTF-8
  8. 前端学习(2911):cdn的加速策略
  9. pytorch 之 imagefloder的用法
  10. mysql 2.71828_Picasso 2.71828 用法
  11. python之读入数据
  12. 什么是RIA技术,RIA技术概览
  13. STK X教程—C++/CLI
  14. JQuery AJAX 的表单提交
  15. 哪里可以下载免费字体,免费可商用字体解决你的烦恼
  16. aplay amixer arecord说明
  17. 8类网线利弊_八类网线用过吗?与超五类、六类等网线有啥区别?
  18. macOS 下的 homebrew
  19. Magento二次开发哪家好呢?
  20. 一些植物查询的网站链接

热门文章

  1. 中国下一代广播电视网(NGB)100问
  2. mssql和mysql的存储过程区别_MySQL和SQL Server存储过程写法上有什么区别?
  3. 基于ZF2的开源项目
  4. SNAP 时间序列InSAR数据准备
  5. 带娃学Scratch之六狩猎游戏制作
  6. 如何解决VMware Workstation 拷贝粘贴失效的问题(能拷贝出来,粘不回去:粘贴失败 请检查您的输...... 无法转换为按键)
  7. Java高质量面试总结
  8. Gparted使用(二)
  9. 关于电脑全局Ctrl+z 组合键达不到撤销功能的解决办法
  10. 充电桩充电技术新能源充电桩开发