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