java随机抽取指定范围内不重复的n个数
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在Java编程中,生成随机数是一项常见的任务,特别是在模拟、测试或游戏开发等领域。本文将详细介绍如何在Java中生成随机数以及如何随机抽取指定范围内不重复的n个数。 Java提供了多种生成随机数的方法: 1. 使用`Math.random()`:这是最基础的生成随机数的方法,它返回一个0.0到1.0之间(包含0.0但不包含1.0)的double类型浮点数。要生成指定范围内的整数,可以将这个浮点数乘以范围的最大值与最小值之差,然后加上最小值,再进行四舍五入。例如: ```java int randomNumber = (int) Math.round(Math.random() * (max - min)) + min; ``` 2. 使用`System.currentTimeMillis()`:该方法返回自1970年1月1日以来的毫秒数,可以用于生成随机数。不过,如果在短时间内连续调用,可能会得到相同的随机数,因为毫秒间隔可能不足以产生足够的差异。 3. 使用`java.util.Random`类:这是更为灵活的随机数生成器,可以通过构造函数传入种子(默认为当前时间)。通过调用`nextInt()`、`nextLong()`等方法,可以生成不同类型的随机数。如果两个`Random`对象使用相同的种子和方法序列,它们会产生相同的随机数序列。 对于从指定范围内随机抽取不重复的n个数,有以下两种常见方法: 1. 两重循环去重法:这种方法直观但效率较低。外层循环控制抽取次数,内层循环检查新生成的随机数是否已经存在于结果数组中。如果不存在,则添加到结果数组中。这种方法的时间复杂度是O(n^2),不适合大数据量的抽取。 ```java public static int[] randomCommon(int min, int max, int n){ // ... 省略检查逻辑 ... int[] result = new int[n]; // ... 省略初始化逻辑 ... while(count < n) { int num = (int) (Math.random() * (max - min)) + min; boolean flag = true; for (int j = 0; j < n; j++) { if(num == result[j]){ flag = false; break; } } if(flag){ result[count] = num; count++; } } return result; } ``` 2. 利用HashSet去重:`HashSet`容器不允许存储重复元素,因此可以用来快速检查生成的随机数是否已存在。这种方法的时间复杂度是O(n),效率较高。 ```java public static void randomSet(int min, int max, int n, HashSet<Integer> set) { // ... 省略检查逻辑 ... for (int i = 0; i < n; i++) { int num = (int) (Math.random() * (max - min)) + min; set.add(num); } } ``` 在实际应用中,通常推荐使用`HashSet`方法,因为它在性能上更优。如果需要生成的随机数集合为数组,可以将`HashSet`转换为数组,例如使用`set.toArray(new Integer[set.size()])`。 总结来说,Java中生成随机数有多种方式,可以根据需求选择合适的方法。在需要随机抽取不重复的n个数时,应优先考虑利用数据结构如`HashSet`来提高效率。这些技巧在处理各种随机问题时都十分有用,例如在游戏中的角色生成、模拟随机事件或测试用例的创建等场景。
- 粉丝: 5
- 资源: 899
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- PHP免登录购买商城源码/抖音商城系统/主播带货手机商城/支持分站/对接易支付
- 基于曼宁公式求解复式断面水位-流量关系曲线(MATLAB全代码)
- 前端常用布局模板39套,纯CSS实现布局
- 课程资源整理,黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程
- 数据集-目标检测系列- 笔 钢笔 检测数据集 pen >> DataBall
- ANSYS命令流(APDL)源代码:简支梁桥梁的建立(beam4、beam188的形变及自振频率)(耦合&弹簧连接梁墩)
- 学习threejs,使用第一视角控制器FirstPersonControls控制相机,city模型
- 【java毕业设计】基于spring+vue的音乐推荐管理源码(完整前后端+说明文档+LW).zip
- 2022-2023全国分省GDP数据.zip
- 数据集-目标检测系列- 圣诞帽 冬天帽子 检测数据集 hat >> DataBall