第六次作业:抽奖系统

本次作业主要练习了集合的用法。根据老师的要求,所购买彩票的人不能有重复的,所以我使用了集合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();
    }

}

需要注意当删除获奖者后在进行下次抽奖时,随机数的范围也应相应的减少。

 

posted on 2016-05-07 21:06  我才是高云鹏  阅读(218)  评论(0编辑  收藏  举报

导航