Random 类位于 java.util 包中,该类用于生成一个伪随机数,也就是按照一定规则生成的随机数。
在进行随机数生成时,随机算法的起源数字被称之为种子数(seed),在种子数的基础上按照相应规则进行变换,从而产生需要的随机数字。相同种子数的 Random对象,相同次数生成的随机数字是完全相同的。
该类有两个构造方法:一个构造方法使用默认的种子(以当前时间作为种子),另一个构造方法需要我们显式传入一个 long 型整数作为种子:
public Random() // 以当前时间作为种子
public Random(long seed) // 自定义随机数生成器种子
与 Math 类中的 random() 方法相比,Random 类提供了更多的方式来生成各种伪随机数,既可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,并且还可以指定生成随机数的范围。
Random 类中常用的方法如下表所示:
表:Random 类的常用方法
方法
方法描述
boolean nextBoolean()
返回一个随机的布尔值
double nextDouble()
返回一个 0~1.0 的随机双精度型值,包括 0,不包括 1.0
int nextInt()
返回一个随机整数
int nextInt(int n)
返回一个 0~n 的随机整数,包括 0,不包括 n
void setSeed(long seed)
设置 Random 对象中的种子数
long nextLong()
返回一个随机长整型值
float nextFloat()
返回一个随机浮点型值
接下来,通过案例来演示 Random 类常用方法的使用:
import java.util.Random;
public class Demo {
public static void main(String[] args) {
Random r1 = new Random(); // 生成一个 Random 对象
double num1 = r1.nextDouble(); // 生成一个 [0,1.0) 区间的小数
System.out.println("[0,1.0) 区间小数: " + num1);
double num2 = r1.nextDouble() * 2; // 生成一个 [0,2.0) 区间的小数
System.out.println("[0,2.0) 区间的小数: " + num2);
int num3 = r1.nextInt(); // 生成一个任意整数
System.out.println("随机整数: " + num3);
int num4 = r1.nextInt(5); // 生成一个 [0,5) 区间的整数
System.out.println("[0,5) 区间的整数: " + num4);
int num5 = r1.nextInt(18) - 3; // 生成一个 [-3,15] 区间的整数
System.out.println("[-3,15) 区间的整数: " + num5);
// 相同种子数的 Random 对象,相同次数生成的随机数字是相同的
Random r2 = new Random(20);
Random r3 = new Random(20);
for (int i = 0; i < 5; i++) {
System.out.println("r2生成整数: " + (r2.nextInt(18) - 3));
System.out.println("r3生成整数: " + (r3.nextInt(18) - 3));
}
}
}
程序的运行结果如下:
[0,1.0)区间小数:0.8630062058747404
[0,2.0)区间的小数:0.7852189438727106
随机整数:1533148188
[0,5)区间的整数:2
[-3,15)区间的整数:0
r2生成整数:14
r3生成整数:14
r2生成整数:13
r3生成整数:13
r2生成整数:6
r3生成整数:6
r2生成整数:12
r3生成整数:12
r2生成整数:2
r3生成整数:2