小明公司有1000人,今年年会举行抽奖活动,一次抽出三等奖4名,二等奖2名,一等奖1名,每个人不能重复中奖。请帮助小明编写抽奖程序,抽奖名单(员工按1~1000依次编号),输出结果举例:
三等奖:666,365,12,999
二等奖:5,520
一等奖:888
思路:就是1-1000内不重复的随机抽取7个数
随机数:Math.random()*1000+1
不重复:想到了Set的去重原理
可以创建一个Set集合
Set set = new HashSet();
然后把随机数存储到Set集合中,直到Set的长度等于7为止,这样Set里面就得到了7个不同的数
方法一:
public static void main(String[] args) {
Set set = new HashSet();
while (set.size()<7){
int num = (int) (Math.random()*1000+1);//获取1-1000的随机数
set.add(num);//添加到Set集合中
}
//方式一:使用迭代器遍历输出
Iterator iterator = set.iterator();
int i=0;
while (iterator.hasNext()){
if (i<3){
if (i==0){
System.out.print("三等奖:");
}
System.out.print(" "+iterator.next());
}
else if (i<5){
if (i==4){
System.out.println();
System.out.print("二等奖:");
}
System.out.print(" "+iterator.next());
}else{
if (i==6){
System.out.println();
System.out.print("一等奖:");
}
System.out.print(" "+iterator.next());
}
i++;
}
}
输出结果:
三等奖: 241 276 597 39
二等奖: 808 825
一等奖: 253
方法二:
public static void main(String[] args) {
Set<Integer> set = new HashSet();
while (set.size()<7){
int num = (int) (Math.random()*1000+1);
set.add(num);
}
//方式二:用list的常用方法get(int index)下标查询输出
//把Set转化为List
ArrayList<Integer> list = new ArrayList<>(set);
System.out.print("三等奖:");
System.out.println(list.get(0)+","+list.get(1)+","+list.get(2)+","+list.get(3));
System.out.print("二等奖:");
System.out.println(list.get(4)+","+list.get(5));
System.out.print("一等奖:");
System.out.println(list.get(6));
}
- 两种方式只是输出的方式不同,Set集合存储的是无序的,不重复的,在获取不重复的元素的时候可以用Set集合存储
- ArrayList集合,存储的是有序 可重复的,由Array所支持的一种索引数据结构(底层是数组结构),可以通过下标随机访问,提供丰富的方法。