黑马程序员技术交流社区
标题:
怎么把抽奖箱的奖金取出来还不重复?
[打印本页]
作者:
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