当前位置:网站首页>键盘录入抽奖人随机抽奖
键盘录入抽奖人随机抽奖
2020-11-06 01:16:00 【我是lsp】
抽奖软件
a、通过键盘录入抽奖人姓名,多个抽奖人用“|”号分割。输入完成后,
控制台打印抽奖人姓名,并提示YES OR NO来表示确认。一旦确
认,自动为抽奖人分配ID,开始抽奖.(如果出现重名,则以ID为准)
b、奖品存放在某个集合中。
c、1等奖 1个 2等奖 3个 3等奖 4个。
d、每次抽奖均打印姓名,然后键盘输入next开始第二次抽奖。如果奖品已经
抽完,则公布中奖汇总。
不再提示next
1.初始化抽奖人的姓名
2.初始化奖品的信息
采用面向对象编程思想 拆跟代码 --》把以上两大功能放进工具类
/**
* 定义一个中奖人
*/
public class LuckDog {
private Integer id;//中奖人id
private String name;//中奖人姓名
public LuckDog(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "LuckDog{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public LuckDog() {
}
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 class Prize {
private String name;//奖品的名称
private String level;////
private Integer count;//奖品的数量
@Override
public String toString() {
return "Prize{" +
"name='" + name + '\'' +
", level='" + level + '\'' +
", count=" + count +
'}';
}
public Prize(String name, String level, Integer count) {
this.name = name;
this.level = level;
this.count = count;
}
public Prize() {
}
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 class Result {
private Integer id;//id
private String username;//中奖人姓名
private String prizeName;//中奖人奖品
@Override
public String toString() {
return "Result{" +
"id=" + id +
", username='" + username + '\'' +
", prizeName='" + prizeName + '\'' +
'}';
}
public Result() {
}
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(Integer id, String username, String prizeName) {
this.id = id;
this.username = username;
this.prizeName = prizeName;
}
}
/**
* 定义一个工具类
* 完成两大功能
* 1.初始化抽奖人的信息
* 2.初始化奖品的信息
*/
public class ToolsClass {
//需要容器 初始化抽奖人的初始容量
static ArrayList<LuckDog> list = new ArrayList<>();
//定义一个静态方法 初始化抽奖人的信息
public static ArrayList<LuckDog> initperson() {
//从控制台中获取
System.out.println("请参与抽奖人的信息,如果有多个,中间用|隔开");
Scanner sc = new Scanner(System.in);
String strs = sc.nextLine();//抽奖人信息
//split(String patter) 拆分字符串为字符数组
//为空校验
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 LuckDog((i + 1), persons[i]));//LuckDog 存储类型对象
}
} 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","二等奖",3));
list.add(new Prize("水杯","三等奖",4));
return list;
}
}
/*
测试
*/
public static void main(String[] args) {
//直接调用ToolClass类中的initperson()方法
ArrayList<LuckDog> ldalist = ToolsClass.initperson();
// for (int i = 0; i < initperson.size(); i++) {
// System.out.println(initperson.get(i));
// }
//直接直接调用ToolClass类中的initPrize()方法
ArrayList<Prize> prize = ToolsClass.initPrize();
// for (int i = 0; i < prize.size(); i++) {
// System.out.println(prizes.get(i));
// }
//构建一个扫描仪 对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入《YES NO》");
String str = sc.nextLine();
//忽略大小写
if (("NO").equalsIgnoreCase(str)) {
//
System.out.println("此次抽奖失败!");
return;//程序结束
} else if (!("YES").equalsIgnoreCase(str)) {
System.out.println("输入的数据不符合要求!");
return;//程序结束
} else {
//程序开始抽奖
//先构建结果容器
ArrayList<Result> results = new ArrayList<>();
//循环 循环的次数 奖品的总数是8
while (ldalist.size() > 0 && prize.size() > 0) {//循环结束的条件
//开始抽奖
int index = (int) (Math.random() * ldalist.size());
//根据索引获取对应的抽奖人
LuckDog luckDog = ldalist.get(index);//抽奖人
//奖品 倒着抽 三等奖
Prize prize1 = prize.get(prize.size() - 1);
//拼接中奖结果
results.add(new Result(luckDog.getId(), luckDog.getName(), prize1.getName()));
//奖品的个数减一 如果该奖品的个数此时为1 应该把该奖删除掉
if (prize1.getCount() == 1) {
//删除对应的奖品
prize.remove(prize1);
} else {
//奖品个数减一
prize1.setCount(prize1.getCount() - 1);
}
//删除上一轮中奖人的信息
ldalist.remove(index);//根据索引删除,直接删除对象
//输出中奖人的信息
System.out.println("本次中奖的人是" + luckDog.getName() + ",中奖人的id是" + luckDog.getId() + ",奖品为" + prize1.getName() + ",中奖等级" + prize1.getLevel());
//再次判断 人数和奖品数
if (prize.size() > 0 && ldalist.size() > 0) {
System.out.println("请输入next开启下一轮抽奖:");
String next = sc.next();
while (!"next".equalsIgnoreCase(next)) {
System.out.println("请输入next开启下一轮抽奖!");
//重复判读输入的next是否为next的内容
next = sc.next();
}
}
}
//抽奖结束
System.out.println("---------------------------");
//展示抽奖汇总
System.out.println("中奖信息结果为:");
for (int i = 0; i < results.size(); i++) {
System.out.println("ID:"+results.get(i).getId() + "\t\t姓名:" + results.get(i).getUsername() + "\t\t奖品名称" + results.get(i).getPrizeName());
}
}
}
版权声明
本文为[我是lsp]所创,转载请带上原文链接,感谢
https://blog.51cto.com/14954368/2547215
边栏推荐
- 面经手册 · 第16篇《码农会锁,ReentrantLock之公平锁讲解和实现》
- 哇,ElasticSearch多字段权重排序居然可以这么玩
- JetCache埋点的骚操作,不服不行啊
- [C#] (原創)一步一步教你自定義控制元件——04,ProgressBar(進度條)
- Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
- 7.2.2 compressing static resources through gzipresourceresolver
- 简直骚操作,ThreadLocal还能当缓存用
- 如何在Windows Server 2012及更高版本中將域控制器降級
- 5.4 静态资源映射 -《SSM深入解析与项目实战》
- Asp.Net Core學習筆記:入門篇
猜你喜欢
随机推荐
连肝三个通宵,JVM77道高频面试题详细分析,就这?
【jmeter】實現介面關聯的兩種方式:正則表示式提取器和json提取器
【新閣教育】窮學上位機系列——搭建STEP7模擬環境
微信小程序:防止多次点击跳转(函数节流)
为了省钱,我用1天时间把PHP学了!
Python + Appium 自動化操作微信入門看這一篇就夠了
7.2.2 compressing static resources through gzipresourceresolver
Anomaly detection method based on SVM
nlp模型-bert从入门到精通(二)
二叉树的常见算法总结
5.4 静态资源映射 -《SSM深入解析与项目实战》
阿里CCO项目组面试的思考
Pycharm快捷键 自定义功能形式
Cocos Creator 原始碼解讀:引擎啟動與主迴圈
小白量化投资交易入门课(python入门金融分析)
PPT画成这样,述职答辩还能过吗?
词嵌入教程
WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
01 . Go语言的SSH远程终端及WebSocket
5.5 ControllerAdvice注解 -《SSM深入解析与项目实战》