当前位置: 首页 > news >正文

Java 数学计算 - Random类

在Java中,Random类用于生成伪随机数。这个类在java.util包中,你可以使用它来生成整数、浮点数等不同类型的随机数。以下是关于Random类的一些学习笔记和示例。

1. 创建Random对象

首先,你需要创建一个Random对象。默认情况下,如果不传入任何参数,它将使用当前时间(以毫秒为单位)作为种子(seed)来初始化随机数生成器。

import java.util.Random;public class RandomExample {public static void main(String[] args) {Random rand = new Random(); // 使用默认种子(当前时间)// ... 使用rand对象来生成随机数}
}

2. 生成随机整数

你可以使用nextInt()方法来生成一个随机整数。这个方法有几个重载版本,允许你指定范围。

  • 生成一个非负整数(包括0):nextInt()
  • 生成一个在指定范围(包括下限,不包括上限)内的整数:nextInt(int bound)

示例:

Random rand = new Random();
int nonNegativeInt = rand.nextInt(); // 生成一个非负整数
int randomIntInRange = rand.nextInt(100); // 生成一个0(包括)到100(不包括)之间的整数

3. 生成随机浮点数

你可以使用nextFloat(), nextDouble(), 和 nextGaussian() 方法来生成随机浮点数。

  • nextFloat():生成一个0.0(包括)到1.0(不包括)之间的随机浮点数。
  • nextDouble():生成一个0.0(包括)到1.0(不包括)之间的随机双精度浮点数。
  • nextGaussian():生成一个服从正态(高斯)分布的随机双精度浮点数,其均值为0.0,标准差为1.0。

示例:

Random rand = new Random();
float randomFloat = rand.nextFloat(); // 生成一个0.0到1.0之间的随机浮点数
double randomDouble = rand.nextDouble(); // 生成一个0.0到1.0之间的随机双精度浮点数
double randomGaussian = rand.nextGaussian(); // 生成一个正态分布的随机双精度浮点数

4. 使用特定种子初始化Random对象

如果你希望每次运行程序时都生成相同的随机数序列,你可以使用特定的种子来初始化Random对象。这通常用于测试目的。

示例:

Random rand = new Random(42); // 使用种子42来初始化Random对象
// ... 现在,每次使用rand对象生成的随机数序列都将是相同的(只要种子相同)

5. 注意事项

  • 由于Random类生成的是伪随机数,因此不应该用于需要高度安全性的场景,如密码学或安全相关的随机数生成。对于这些场景,应该使用java.security包中的类,如SecureRandom
  • 如果你需要生成大量随机数,并且性能是一个关键因素,那么你可能需要考虑使用其他更高效的随机数生成算法或库。
http://www.lryc.cn/news/367314.html

相关文章:

  • Ubuntu22.04之解决:无法关机和重启问题(二百四十三)
  • 大学数字媒体艺术设计网页设计试题及答案,分享几个实用搜题和学习工具 #媒体#职场发展
  • 【ArcGIS微课1000例】0119:TIFF与grid格式互相转换
  • B3870 [GESP202309 四级] 变长编码
  • WordPress网站更换域名后如何重新激活elementor
  • linux cron 执行url
  • 压缩视频在线压缩网站,压缩视频在线压缩工具软件
  • linux经典例题编程
  • 二叉树的实现(初阶数据结构)
  • C++笔试强训day41
  • 【JavaScript】内置对象 - 字符串对象 ⑤ ( 判断对象中是否有某个属性 | 统计字符串中每个字符出现的次数 )
  • Linux环境下测试服务器的DDR5内存性能
  • 19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)
  • Scala 练习一 将Mysql表数据导入HBase
  • 前端工程化:基于Vue.js 3.0的设计与实践
  • Linux☞进程控制
  • mybatis离谱bug乱转类型
  • 视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案
  • VS环境Python:深度探索与实用指南
  • SpringBoot整合SpringSecurit(二)通过token进行访问
  • 【算法训练 day50 打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ】
  • YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution
  • 深入解析力扣183题:从不订购的客户(LEFT JOIN与子查询方法详解)
  • 牛客NC32 求平方根【简单 二分 Java/Go/C++】
  • 王道408数据结构CH3_栈、队列
  • Angular 由一个bug说起之六:字体预加载
  • 并查集进阶版
  • 贪心(不相交的开区间、区间选点、带前导的拼接最小数问题)
  • [力扣题解] 617. 合并二叉树
  • kafka-消费者组(SpringBoot整合Kafka)