跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Java随机数教程:如何利用Random类生成指定范围的伪随机数

Java中生成指定范围随机数需按区间类型选择方法:闭区间[a,b]用nextInt(b-a+1)+a;左闭右开[a,b)用nextInt(b-a)+a;浮点数用nextDouble()线性变换;应复用Random实例,多线程用ThreadLocalRandom,安全场景用SecureRandom。 Java中用
Random
类生成指定范围的随机整数,核心是“缩放+平移”:先获取0到1之间的均匀分布,再通过乘法调整范围、加法移动起点。但更常用且不易出错的方式是直接调用
nextInt(bound)
配合偏移计算。 生成[a, b]闭区间内的随机整数 这是最常见需求。注意
Random.nextInt(n)
返回的是[0, n)范围的整数(含0,不含n),所以要得到[a, b],需让上界为
b - a + 1
,再加a作为起点: 正确写法:
int r = rand.nextInt(b - a + 1) + a;
例如生成[5, 15]的随机数:
rand.nextInt(11) + 5;
(因为15−5+1=11) 错误示例:
rand.nextInt(b) + a
会导致范围偏移或越界 生成[a, b)左闭右开区间的随机整数 这种场景适合模拟数组索引、循环边界等。只需让bound等于区间长度,无需+1:
int r = rand.nextInt(b - a) + a;
例如生成[0, 10)即0~9的随机索引:
rand.nextInt(10);
若a不为0,如[3, 8):
rand.nextInt(5) + 3;
生成指定范围的随机浮点数
nextDouble()
返回[0.0, 1.0)的double值,同样适用线性变换: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; [a, b)范围:
double r = rand.nextDouble() * (b - a) + a;
[a, b]范围(实际仍是左闭右开,但浮点精度下可视为闭):
rand.nextDouble() * (b - a + Double.MIN_VALUE) + a;
(一般无需这么严谨,直接用前者即可) 保留两位小数示例:
Math.round(r * 100.0) / 100.0;
避免常见陷阱 新手容易忽略的几个关键点: 不要每次都要new Random() :频繁创建会因时间种子相近导致重复序列;应复用同一个实例(尤其在循环或高并发中) 线程安全考虑 :Random本身不是完全线程安全的,多线程环境下建议用
ThreadLocalRandom.current()
替代 SecureRandom用于安全场景 :密码、令牌等需要加密强度的随机数,必须用
SecureRandom
,而非普通Random

相关文章