一. java.lang.Math.Random
作用:返回带正号的double值,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
范围:[0.0,1.0)的左闭右开区间
原理:Math.Random内部是调用的Java.util.Random无参构造器实现的
代码:
package Java_study;
//无需导包
public class suiji1 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(Math.random());
}
}
}
测试记录:
0.2656139815369676
0.9545819797288358
0.48223757014225377
0.5396096975059794
0.2549847220943994
二. java.util.Random
使用的是48-bit的种子,然后调用一个linear congruential formula线性同余 。如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的.
- 无参构造Random():创建一个新的随机数生成器。
1)无参构造器内部也是调用的有参构造器,只是种子是通过系统当前时间计算出来的一个long型数据,所以多次运行结果都不一样 - 有参构造Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
1)有参构造在指定种子(seed)值不变的情况下,返回随机数的序列是固定的。
方法摘要:
生成下一个伪随机数。
protected int next(int bits)
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
boolean nextBoolean()
生成随机字节并将其置于用户提供的 byte 数组中。
void nextBytes(byte[] bytes)
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
double nextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
float nextFloat()
返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
double nextGaussian()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt()
返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
int nextInt(int n)
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
long nextLong()
使用单个 long 种子设置此随机数生成器的种子。
void setSeed(long seed)
范围
- double d1 = r.nextDouble();
=> 生成[0,1.0)区间的小数 - double d2 = r.nextDouble() * 5;
=> 生成[0,5.0)区间的小数 - double d3 = r.nextDouble() * 1.5 + 1;
=> 生成[1,2.5)区间的小数 - int n = r.nextInt();
=> 生成[-231,231-1)之间的整数 - 生成[0,10)区间的整数
int n2 = r.nextInt(10);
n2 = Math.abs(r.nextInt() % 10); //对10取余后,Math.abs取绝对值
代码:
package Java_study;
import java.util.Random;
public class suiji2 {
public static void main(String[] args) {
// 创建对象
Random r = new Random();
for (int x = 1; x <= 10; x++) {
//获取随机数
int number = r.nextInt();
System.out.println("number:" + number);
}
System.out.println("----------");
for (int x = 1; x <= 10; x++) {
//获取随机数
int number1 = r.nextInt(10);
System.out.println("number1:" + number1);
}
System.out.println("----------");
//如果获取一个1-100之间的随机数呢?
int i = r.nextInt(100) + 1;
System.out.println(i);
}
}
测试记录:
number:288284056
number:1636033943
number:657595534
number:-2128946490
number:1232717773
number:1103976520
number:1865262929
number:1076542435
number:879661990
number:21193790
----------
number1:9
number1:6
number1:0
number1:6
number1:7
number1:4
number1:1
number1:6
number1:6
number1:1
----------
93
参考:
- https://blog.csdn.net/qq_43529621/article/details/113250176