有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 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数组已经取过值的位置赋值为true
                    length++;//每取出一个值长度加一,当下标值达到Boolean型数组的长度减一时,证明已经取完。
                }
            }
        }
    }
}

三、代码运行结果如下:

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抽奖之星是一款简单好用的随机抽奖软件。软件可用于各种活动和晚会、年会抽奖,支持文字抽奖、图片抽奖等多种模式,还内置作弊内定、黑白名单、名单分组等诸多功能。软件界面美观简洁、使用方便,速度快,质量高,对于用户来说是一款很不错的软件,小编这里推荐大家使用这款软件! 抽奖之星基本简介 抽奖模式:含文字抽奖、照片抽奖两种模式。 重复中奖:采用禁止重复中奖算法,自动滤除已经中奖的参选者。 随机抽取:随机滚动显示参选者(姓名、号码、照片等)。 按键方便:按回车开始滚动,按空格停止滚动,按Tab键播放颁奖音乐。 名单导入:导入文本文件,或导入图片文件夹,最多可导入高达2万条。 抽奖结果:自动保存抽奖结果,不惧死机断电,支持缺席等的作废处理。 灵活易用:无需预先固定中奖数量,手动切换当前奖项,设置每次抽取个数(1-50)。 背景音乐:支持滚动音乐、中奖音乐、颁奖音乐,并附带了相关音乐资源。 辅助工具:附带了图片批量缩小、号码座位号批量生成、强大的纯文本编辑、多列表格数据导入导出、格式转换等免费工具。 抽奖之星的安装 把下载好的安装包解压到当前文件夹,之后双击【cjzx.exe】运行文件进行安装,打开的时候会出现安装框,依次开始安装,依照步骤点击下一步,并选择同意协议和软件安装位置即可。 抽奖之星的使用   安装完成后,点击【抽奖之星】快捷方式即可进入抽奖之星软件。如图所示,这是软件的主界面。     如图所示,这是软件的界面布局介绍。用户可以点击界面的各种按钮实现自己所需要的各种功能。     如图所示,这是软件的文字中奖名单模式。     如图所示,这是软件的文字图片名单模式。     如图所示,这是软件的播放总名单模式显示。软件的功能就大致介绍到这里了,软件其余的具体功能就有小伙伴们自己去发掘吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

faramita_of_mine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值