编程题目:
5.有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组:
int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖!
抽奖箱2 又产生了一个 100 元大奖!
…..
要求:奖金不可出现重复的,被抽走了就不能再出现了。
示例代码:
package program.thread.exercise05;
import java.util.*;
/**
* 5. 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
* 创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
* 抽奖箱1 又产生了一个 10 元大奖
* 抽奖箱2 又产生了一个 100 元大奖
* .....
* 要求:奖金不可出现重复的,被抽走了就不能再出现了
**/
public class RewardPool {
public static void main(String[] args) {
Reward reward = new Reward();
new Thread(reward,"抽奖箱1").start();
new Thread(reward,"抽奖箱2").start();
}
}
class Reward implements Runnable {
int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
List<Integer> list = new ArrayList<Integer>();
@Override
public void run() {
while(true){
synchronized (this) {
int index = (int) (Math.random()*arr.length);
if(list.size() == arr.length){
return;
}
if(!list.contains(index)){
list.add(index);
try {
Thread.sleep(30);
String name = Thread.currentThread().getName();
if(name.equals("抽奖箱1")){
System.out.println(name+"又产生了一个 "+arr[index]+"元大奖");
}
if(name.equals("抽奖箱2")){
System.out.println(name+"又产生了一个 "+arr[index]+"元大奖");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
结果显示: