黑马程序员技术交流社区
标题:
求思路
[打印本页]
作者:
梦想工程师
时间:
2016-10-1 00:56
标题:
求思路
结果出来了,但老师说逻辑有问题我也不知道怎么改了,我都不知道要怎么做了
有没有好心人帮我分析一下
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++;
}
}
}
}
}
作者:
邓yilang
时间:
2016-10-1 01:26
哈哈,一看就知道是上课被老师抽到的同学。我的思路是这样的,还记得卖火车票的例子吧,在那while循环里面在添加一个循环,用来存储彩票的前六位数,紧接着在产生一位双色球的蓝色号码。这样,进来一个人,就会拿到一注完整的双色球号码,然后将集合清零,下一次循环又做同样的事。希望能对你有所帮助!
作者:
边_城
时间:
2016-10-1 02:12
不明觉厉
作者:
李春林
时间:
2016-10-1 02:56
水水技术分……
作者:
markiyangliu
时间:
2016-10-1 15:25
当我看到定义的变量是bb,我就感觉我好想发现了什么!
作者:
三人壹大
时间:
2016-10-1 21:34
到底是什么?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2