Java随机数(Random类)详解(附带实例)
Random 类位于 java.util 包中,该类用于生成一个伪随机数,也就是按照一定规则生成的随机数。
在进行随机数生成时,随机算法的起源数字被称之为种子数(seed),在种子数的基础上按照相应规则进行变换,从而产生需要的随机数字。相同种子数的 Random对象,相同次数生成的随机数字是完全相同的。
该类有两个构造方法:一个构造方法使用默认的种子(以当前时间作为种子),另一个构造方法需要我们显式传入一个 long 型整数作为种子:
Random 类中常用的方法如下表所示:
接下来,通过案例来演示 Random 类常用方法的使用:
在进行随机数生成时,随机算法的起源数字被称之为种子数(seed),在种子数的基础上按照相应规则进行变换,从而产生需要的随机数字。相同种子数的 Random对象,相同次数生成的随机数字是完全相同的。
该类有两个构造方法:一个构造方法使用默认的种子(以当前时间作为种子),另一个构造方法需要我们显式传入一个 long 型整数作为种子:
public Random() // 以当前时间作为种子 public Random(long seed) // 自定义随机数生成器种子与 Math 类中的 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