生成指定范围内的随机数

生成随机数

Math.random() // 0.900457498789438

利用random函数可以返回 0 ~ 1 之间的随机数,包含 0 不包含 1

然后再来了解一下获取整数的方法

let num = Math.random()
let a = parseInt(num, 10)
let b = Math.ceil(num)
let c = Math.floor(num)
num // 0.18738231591245902
a // 0
b // 1
c // 0
  • parseInt: 向下取整
  • Math.ceil: 向上取整
  • Math.floor: 向下取整

生成指定范围内的随机整数

我们来分析一下实现的方法

  1. 首先Math.random()会生成[0,1}的随机数,那么Math.random()*5就会生成[0,5}的随机数
  2. 我们要得到整数,那么我们需要借助于parseInt、Math.ceil、Math.floor,其中我们知道parseInt与Math.floor都是向下取整,Math.ceil是向上取整
  3. Math.random()*5向下取整会得到[0,4]的随机数,向上取整会得到[1,5]的随机数

那么,生成[1,max]范围内的随机数如下:

parseInt(Math.random()*max, 10) + 1;
Math.floor(Math.random()*max) + 1;
Math.ceil(Math.random()*max);

生成[0,max]范围内的随机数如下:

parseInt(Math.random()*(max+1), 10)
Math.floor(Math.random()*(max+1))

生成[min, max]范围内的随机数如下:

Math.floor(Math.random()*(max-min+1) + min);
parseInt(Math.random()*(max-min+1) + min, 10);
### Java 中使用 `Math.random()` 生成指定范围内随机数 `Math.random()` 方法返回一个介于 `[0, 1)` 的伪随机浮点数[^1]。为了生成指定范围内随机数,可以通过简单的算术运算将其映射到所需的区间。 假设需要生成一个在 `[min, max)` 范围内随机整数,则可以按照以下方式实现: ```java public class RandomNumberGenerator { public static int getRandomNumberInRange(int min, int max) { if (min >= max) { throw new IllegalArgumentException("Max must be greater than min"); } return (int)(Math.random() * (max - min)) + min; // 将 [0,1) 映射到 [min,max) } public static void main(String[] args) { int min = 10; int max = 20; System.out.println(getRandomNumberInRange(min, max)); } } ``` 上述代码通过 `(Math.random() * (max - min)) + min` 实现了将 `[0,1)` 转换为 `[min, max)` 的功能。需要注意的是,由于 `Math.random()` 返回的值永远不会等于 1,因此最大值不会被包含在结果集中。 如果希望生成双精度类型的随机数而不是整数,只需移除强制类型转换部分即可: ```java public static double getRandomDoubleInRange(double min, double max) { return Math.random() * (max - min) + min; // 对应双精度数值的计算 } ``` 尽管 `Math.random()` 提供了一种简单的方式来生成随机数,但它并不是真正的随机数发生器[^2]。实际上,它依赖于底层算法产生的伪随机序列[^3]。对于大多数应用来说,这种伪随机性已经足够;但在安全性要求较高的场景下(如加密),建议改用更安全的随机数生成机制,例如 `SecureRandom` 类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值