黑马程序员技术交流社区

标题: 怎么把抽奖箱的奖金取出来还不重复? [打印本页]

作者: dd6434541    时间: 2016-5-12 19:16
标题: 怎么把抽奖箱的奖金取出来还不重复?

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 + "元大奖");

                        }
                }

        }

}
作者: 黑马豹仔    时间: 2016-9-14 08:28
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛
作者: flfjewffg    时间: 2016-9-15 17:04
楼主的方法,是不能出去重复的索引的,下次随机数,还是有可能出现一样的索引,中间需要一个判断过程.我用的集合.附上代码
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--;
                                }
                                }
                        }
                }
作者: 芳燚乐乐    时间: 2016-9-16 23:44
果然高手,新手学习啦!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2