HOME> 世界杯收视率> Java随机数(Random类)详解(附带实例)

Java随机数(Random类)详解(附带实例)

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