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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


public class t2 {
        public static void main(String[] args) {
                /*
                 *
                 * 2.有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr =
                 * {10,5,20,50,100,200,500,800,2,80,300};
                 * 创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”, 随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
                 *
                 * 抽奖箱1 又产生了一个 10 元大奖 抽奖箱2 又产生了一个 100 元大奖 //.....
                 */
                G g = new G();
                new Thread(g, "抽奖箱1").start();
                new Thread(g, "抽奖箱2").start();

        }
}

class G implements Runnable {
        private int[] arr = { 10, 5, 20, 50, 100, 200, 500, 800, 2, 80, 300 };
        private int count = arr.length;

        public void run() {
                while (true) {
                        synchronized (this) {

                                String n = Thread.currentThread().getName();
                                Random r = new Random();
                                int s = r.nextInt(arr.length);
                                if (count <= 0) {
                                        break;
                                }
                               
                                // 抽奖箱1 又产生了一个 10 元大奖
                                count--;
                                System.out.println(n + "又产生了一个" + s + "元大奖");

                        }
                }

        }

}

3 个回复

倒序浏览
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛
回复 使用道具 举报
楼主的方法,是不能出去重复的索引的,下次随机数,还是有可能出现一样的索引,中间需要一个判断过程.我用的集合.附上代码
class Chou extends Thread {
                        //定义一个数组
                private int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
                        //拿到数组的长度
                private int num = arr.length;
                        //定义一个集合用来存重复的索引
                private ArrayList<Integer>list = new ArrayList<>();
                public void run() {
                        while(true) {
                                synchronized (this) {
                                        //num为数组长度,当索引拿完之后,也就结束抽奖了
                                        if(num <= 0)
                                                break;
                                        //创建随机数对象
                                        Random r = new Random();
                                        //定义一个变量记录索引
                                        int a;
                                        //循环获取随机索引
                                        while(true){
                                                a = r.nextInt(arr.length);
                                                //集合里面包含此索引
                                                if(list.contains(a)){
                                                //结束本次循环,继续下次循环
                                                        continue;
                                                }else {
                                                //如果有,存入集合,相当于把a的值置为了这个数
                                                        list.add(a);
                                                        break;
                                                }
                                        }
                                        //拿到a索引对应的元素
                                        int meony = arr[a];
                                        //拿到当前线程的名字
                                        String name = Thread.currentThread().getName();
                                        try {
                                                //设置等待时间
                                                Thread.sleep(300);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        System.out.println(name+"获得了"+meony+"元");
                                        //索引长度减一
                                        num--;
                                }
                                }
                        }
                }
回复 使用道具 举报 1 0
果然高手,新手学习啦!
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马