A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦想工程师 中级黑马   /  2016-10-1 00:56  /  1707 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

结果出来了,但老师说逻辑有问题我也不知道怎么改了,我都不知道要怎么做了
有没有好心人帮我分析一下

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++;
                                }
                        }
                }
        }
}

5 个回复

倒序浏览
哈哈,一看就知道是上课被老师抽到的同学。我的思路是这样的,还记得卖火车票的例子吧,在那while循环里面在添加一个循环,用来存储彩票的前六位数,紧接着在产生一位双色球的蓝色号码。这样,进来一个人,就会拿到一注完整的双色球号码,然后将集合清零,下一次循环又做同样的事。希望能对你有所帮助!
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
当我看到定义的变量是bb,我就感觉我好想发现了什么!
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马