有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 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}; 创建两个抽奖箱(线程)设置线程名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:抽奖池抽奖

  • 一、题目描述:
  • 二、核心代码如下:
  • 三、代码运行结果如下:

一、题目描述:

  有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 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}; 创建两个抽奖箱(线程)设置线程名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775019

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE