结果出来了,但老师说逻辑有问题我也不知道怎么改了,我都不知道要怎么做了
有没有好心人帮我分析一下
package com.heima.Collection;
import java.util.ArrayList;
import java.util.Random;
import java.util.TreeSet;
public class Text15 {
/**
* 某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
* 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下: 编号为: 2 的员工 从后门 入场!
* 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07] 编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是:
* [06, 11, 14, 22, 29, 32, 15] //..... 从后门入场的员工总共: 13 位员工 从前门入场的员工总共: 87
* 位员工
*/
public static void main(String[] args) {
MyDream t1 = new MyDream("前门");
MyDream t2 = new MyDream("后门");
t1.start();
t2.start();
}
}
class MyDream extends Thread {
private static int num = 100; //100个人
Random r = new Random();
static TreeSet<Integer> bb = new TreeSet<>(); //定义集合用来存储摇到的6个不同号码
int a = 0;
public MyDream(String str) {
super(str);
}
public void run() {
while (true) {
int x = r.nextInt(33) + 1; //随机摇号
synchronized (MyDream.class) {
if (num == 0) {
System.out.println("从"+getName()+"入场的员工总共:"+ a +"位员工");
break;
}
if (bb.size() < 6) { //存储6个号
bb.add(x);
} else {
ArrayList<String> sb = new ArrayList<>();
for (Integer i : bb) { //改变单个数号码格式
if (i >= 1 && i <= 9) {
sb.add("0"+ i);
} else {
sb.add(i+"");
}
}
int y = r.nextInt(16) + 1; //最后一位号码
if (y >= 1 && y <= 9) { //改变格式
sb.add("0"+ y);
}else{
sb.add(y+"");
}
System.out.println("编号为:" + num-- + "的员工 从" + getName()+ "入场! 拿到的双色球彩票号码是:" + sb);
bb.clear(); //清空bb集合
a++;
}
}
}
}
}
|
|