本文主要是介绍有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:抽奖池抽奖
- 一、题目描述:
- 二、核心代码如下:
- 三、代码运行结果如下:
一、题目描述:
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱 1”,“抽奖箱 2”,随机从 arr 数组中获取奖项元素并打印在控制台上,但是最终相同金额不能抽取多次。
注意:随机数获取使用 Math.random() 可以得到一个 [0,1) 的随机小数。返回格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 50 元大奖
二、核心代码如下:
package homework10.homework1025;
/*** 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300};* 创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱 1”,“抽奖箱 2”,随机从 arr 数组中获取奖项元素并打印在控制台上,但是最终相同金额不能抽取多次。* 注意:随机数获取使用 Math.random() 可以得到一个 [0,1) 的随机小数。返回格式如下:* 抽奖箱1 又产生了一个 10 元大奖* 抽奖箱2 又产生了一个 50 元大奖*/
public class Demo01 {public static void main(String[] args) {lotteryPool lottery = new lotteryPool();//实例化对象Thread t1 = new Thread(lottery,"抽奖箱1");Thread t2 = new Thread(lottery,"抽奖箱2");t1.start();//启动线程t2.start();//启动线程}
}
class lotteryPool extends Thread{int [] arr = {10,5,20,50,100,200,500,800,2,80,300};boolean[] flag = new boolean[arr.length];//创建一个Boolean型数组int length = 0;public void run(){while(length<arr.length){//当下标达到Boolean型数组的arr.length-1时,数据已取完,跳出循环try {Thread.sleep(1000);//每次线程休眠一秒再执行} catch (InterruptedException e) {e.printStackTrace();}int index = (int) (Math.random() * arr.length);//获取随机Boolean型数组的下标并获取相同位置上的arr数组的值synchronized (this){if(!flag[index]){System.out.println(Thread.currentThread().getName()+"又产生了一个"+arr[index]+"元大奖");flag[index]=true;//Boolean数组已经取过值的位置赋值为truelength++;//每取出一个值长度加一,当下标值达到Boolean型数组的长度减一时,证明已经取完。}}}}
}
三、代码运行结果如下:
这篇关于有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!