标签:als 思想 over new 程序 cas rri 拆分 spl
抽奖软件
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());
}
}
}
标签:als 思想 over new 程序 cas rri 拆分 spl
原文地址:https://blog.51cto.com/14954368/2547215