編程題目:
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();
}
}
}
}
}
}
結果顯示: