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