Java的Math.random获取区间随机数

简介: Java的Math.random获取区间随机数

Java的Math.random获取[a-b]随机数

关于 数组API Math.random()的介绍: 要知道, Math.random()是获取 [0, 1)的随机数,表示取0-1的随机数,是 >=0 且 <1的,也就是不包括1。

获取 [a, b) 之间的随机数

比如说要取 [0, 50)的随机数, 从0开始取,但是不包括50.

class MathRandom {
  public static void main(String[] args) {
    int r = Math.random() * 50;
    // 取0-50,但是不包括50;
    // 取值范围: 0.0 - 49.0;
    // 如果想转为 int 型, 可以使用 (int) 强转符;
  }
}

[0, 50)我们可以理解了, 但是如果要求你取出 [5, 86)中的随机数, 是不是就有点头疼了? 别急, 看代码讲解

这边希望算出 [5 - 86) 中的随机数,但是又不好下手, 我们可以拆分这几个步骤, 首先 86 拆分 81 + 5, 希望ramdom 算到0的时候,从5开始, 所以进行一个 +5 的操作, 先让random * 81, 然后再 +5 即可算出 [5, 86) 中的随机数了

class MathRandom {
  public static void main(String[] args) {
    int r = Math.random() * 81 + 5;
  }
}

求 [a, b) 的公式, 包括a, 但不包括b:

Math.random() * (b - a) + a;
= W =   我是隔离代码块   = W =

获取 [a, b] 之间的随机数

还是从最简单的 [0, 100] 讲起, 我们如何获取 [0, 100] 之间的随机数呢? 既包括0, 又包括100:

很简单, 但是依照上面写到的 Math.random() * 100; 我们是获取不到 100 这个值得, 最高就会算到 99.999999999…

只需要在和后面计算的时候, 让b这个数 + 1; 比如说是这样:

注意点: 此 +1 为 b计算值和1 一起加

如果ramdom() * b + 1; 那这和 [0, 100] 可就一点关系都没有了, 这代表的是最低从 1 开始计算随机数了!

// 求 [0, 100] 之间的随机数(包括100);
class MathRandom {
  public static void main(String[] args) {
    int r = Math.random() * (100 + 1);
  }
}

当然, 这样硬写 +1 可能属于降智行为, 获取 [0, 100], 直接使用 如下代码就可以了… QAQ

int r = Math.random() * 101);

那我们如何计算 [a - b] 之间的随机数呢? 例如: [10 - 99]:

其实根据 [a - b) 我们就可以演算出公式了, 我们可以让 ramdom() * (b - a) + a ?

错 错 错!(自问自答), 我们计算 [a - b)之间的随机数利用上面公式是完全没问题的, [a - b] 是既包含a也包含b的随机数.

所以计算 [10 - 99] 之间的随机数正确的代码为:

// 求 [10, 99] 之间的随机数(包括99);
class MathRandom {
  public static void main(String[] args) {
    int r = Math.random() * (99 - 10 + 1) + 10;
  }
}

求 [a, b] 的公式, 包括a, 包括b:

Math.random() * (b - a + 1) + a;
步骤: 
Math.random(); [0, 1)
Math.random() * (b - a + 1);  [0, 1) --> [0, 90) 
// 因为我们要包含a 也包含b
math.random() * (b - a + 1) + a;  [0, 1) --> [0, 90) --> [10, 100)
现在: 最大数为 99.99...   |   最小数为 10 
先运算完小括号内的内容,得出来的是90, +10 为100
当random计算为0时, +10 等于10
相关文章
|
6月前
|
Java
Java产生随机数
Java产生随机数
72 0
|
Java 数据安全/隐私保护 索引
使用Java中的随机函数生成随机数
在Java编程中,我们经常需要生成随机数来模拟各种情况或者作为密码等敏感信息的一部分。Java提供了一个内置的随机函数库,可以轻松地生成各种类型的随机数。本篇博客将介绍如何使用Java中的随机函数来生成随机数。
271 1
|
3月前
|
Java
Java系类 之 生成随机数(random()和Random类)
这篇文章介绍了Java中生成随机数的两种方法:使用`Math.random()`方法和`Random`类的实例方法,并提供了示例代码展示如何使用这些方法生成特定范围或特定条件下的随机数。
|
6月前
|
Java
java_键盘录入、随机数
本文介绍了Java中键盘录入和Random类的使用。键盘录入用于从用户那里获取数据,通过导入`java.util.Scanner`,创建`Scanner`对象,调用`nextInt()`或`nextDouble()`读取整数和小数,`next()`读取字符串。Random类用于生成随机整数,导入该类后创建对象,调用`nextInt(int bound)`生成[0, bound-1]范围内的随机数。在JDK17及以上版本,可以使用`nextInt(int start, int end)`生成[start, end)范围的随机数。常见应用包括猜数字游戏和随机点名。
55 0
|
5月前
|
存储 安全 Java
Java生成随机数的代码和方法
Java生成随机数的代码和方法
127 6
|
5月前
|
算法 安全 Java
什么是Java伪随机数,基础打牢。 #程序员 #Java #编程
什么是Java伪随机数,基础打牢。 #程序员 #Java #编程
33 0
JAVA 比较两个区间是否存在交集
最近遇到一个开发问题,判断两个价格的大小,听着很简单,但其实价格是浮动的,也就是说价格是一个范围,比如物品A的价格是5~10,现在我们通过筛选条件,把价格符合在8~20之前的物品筛选出来,很明显物品A是符合这个筛选条件的,因为它的价格可以说8、9、10,完全符合在8~20的范围内。
244 1
|
6月前
|
Java Go C++
Golang每日一练(leetDay0108) 灯泡开关I\II Bulb Switcher
Golang每日一练(leetDay0108) 灯泡开关I\II Bulb Switcher
55 0
Golang每日一练(leetDay0108) 灯泡开关I\II Bulb Switcher
|
6月前
|
C++ Java Go
Java每日一练(20230425) 乘积最大子数组、插入区间、删除有序数组中的重复项II
Java每日一练(20230425) 乘积最大子数组、插入区间、删除有序数组中的重复项II
52 0
Java每日一练(20230425) 乘积最大子数组、插入区间、删除有序数组中的重复项II
|
6月前
|
Go Java C++
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
66 0
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形