第六次作业:抽奖系统
本次作业主要练习了集合的用法。根据老师的要求,所购买彩票的人不能有重复的,所以我使用了集合set来存放买彩票的人。
我一共创建了两个类:一个用来兑奖开奖和购买,另一个用来存放查询抽奖人信息的方法
先放代码:
这是兑奖开奖类的:
package choujiang; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.HashSet; import java.util.Random; import java.util.Scanner; import java.util.Set; public class test { public Set<list> aset = new HashSet(); public int kaijianghao,kaijianghao1; public void addPerson(){ int hao,hao1; String namee; while(aset.size()<5){ //设定抽奖人数 Scanner sc = new Scanner(System.in); System.out.println("请输入您的姓名:"); namee = sc.nextLine(); System.out.println("请输入您所选择的第一个号码(0-4号):"); hao = sc.nextInt(); System.out.println("请输入您所选择的第二个号码(5-9号):"); hao1 = sc.nextInt(); list a = new list(namee,hao,hao1); aset.add(a); } System.out.println("本期参与人数已满5人,感谢您的参与,请下次在来"); } public void printperson(){ System.out.println("抽奖者信息:\n"+aset); } public void kaijiang(){ Random r = new Random(); kaijianghao = r.nextInt(5); kaijianghao1 = r.nextInt(5)+5; System.out.println("本期中奖号码为:"+kaijianghao+" "+kaijianghao1); } public void duijiang(){ int i=2,j=1; //设置两个二等奖一个一等奖 for (list list : aset) { if(i>0&&j>0){ if(kaijianghao==list.getNumber()||kaijianghao1==list.getNumber1()){ //防止重复中奖 if(kaijianghao==list.getNumber()&&kaijianghao1==list.getNumber1()){ System.out.println("恭喜"+list.getName()+"中一等奖"); j--; }else{if(i>0&&j>0){ System.out.println("恭喜"+list.getName()+"中二等奖"); i--;} }}} } } public void ceshi(){ list a1 = new list("张三",0,5); list a2 = new list("李四",0,5); list a3 = new list("赵五",0,5); list a4 = new list("王六",3,8); list a5 = new list("郑七",4,9); aset.add(a1); aset.add(a2); aset.add(a3); aset.add(a4); aset.add(a5); } public static void main(String[] args) { test t = new test(); t.addPerson(); t.printperson(); t.kaijiang(); t.duijiang(); } }
这是抽奖人信息类的:
package choujiang; public class list { private String name; private int number; private int number1; public list(String name, int number, int number1) { super(); this.name = name; this.number = number; this.number1 = number1; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getNumber1() { return number1; } public void setNumber1(int number1) { this.number1 = number1; } @Override public String toString() { return "[抽奖者姓名:" + name + ", 第一个号码:" + number + ", 第二个号码:" + number1 + "]\n"; } }
因为中奖号码是随机的,为了能体现出我设置的只有两个二等奖和一个一等奖,我把所有购买奖券的人的数字全写成了0和5。
本次随机开奖数出现了5,本应该有五个人都中二等奖,可以看出,只有李四和赵五得到了二等奖,而剩下的人虽然也获奖,但是名额满了,所以不显示获奖。
并且,在代码中,为了防止中了一等奖的人同时得到二等奖,我将两个if语句嵌套,解决了这一个问题。
还有老师要求要设置购买彩票的人数,我根据集合set的size大小用来成为设置人数的条件。
这次作业,把老师所要求的功能都实现了,并在代码中注释出了每个功能的位置。
因为上个学期期中就是做的彩票机,并且,本次作业主要是对集合的练习,所以我这次没有做GUI界面去演示。
这次作业完成后,让我对集合set的用法更加了解。
=============================分 割 线====================================
通过上节java课,老师又讲述了一种新的抽奖方法,利用arraylist和Collections来进行抽奖。
package test; import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class cj { public ArrayList<Integer> list; public ArrayList<Integer> addPerson(){ if(list==null){ list = new ArrayList<Integer>(); for(int i=1;i<=15;i++){ list.add(i); } } Collections.shuffle(list); return (list); } public void choujiang(){ Random r = new Random(); int a = r.nextInt(15); System.out.println("一等奖:"+list.get(a)+"号"); list.remove(a); int k=14; for(int j = 1;j<=10;j++){ a=r.nextInt(k); System.out.println("二等奖:"+list.get(a)+"号"); list.remove(a); k--; } } public static void main(String[] args) { // TODO Auto-generated method stub cj c = new cj(); c.addPerson(); c.choujiang(); } }
需要注意当删除获奖者后在进行下次抽奖时,随机数的范围也应相应的减少。