一、Random类
1、构造方法:
①有参:通过指定种子数进行创建
(使用相同的种子数创建多个Random对象,这些对象生成的随机数序列将完全相同)
(适用于需要可重复生成相同随机数序列的场景,如科学计算、算法测试)
②无参:使用当前时间的毫秒值作为种子数
(每次调用时由于时间在变化,因此生成的随机数序列也会不同)
(适用于需要每次运行时生成不同随机数序列的场景,如模拟实验、游戏开发)
public Random(long seed) {
if (getClass() == Random.class)
this.seed = new AtomicLong(initialScramble(seed));
else {
// subclass might have overriden setSeed
this.seed = new AtomicLong();
setSeed(seed);
}
}
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
种子数是随机数生成器的初始值,决定了随机数生成序列的起点。只是随机算法的起源数字,和生成的随机数字的区间无关。
举例生成10个[0,100)之间的随机整数:
public class Main {
public static void main(String[] args) {
System.out.print("无参r1生成10个[0,100)之间的随机整数:");
Random r1 = new Random();
for (int i = 0; i < 10; i++) {
System.out.print(r1.nextInt(100)+" ");
}
System.out.println();
System.out.print("无参r2生成10个[0,100)之间的随机整数:");
Random r2 = new Random();
for (int i = 0; i < 10; i++) {
System.out.print(r2.nextInt(100)+" ");
}
System.out.println();
System.out.print("种子数13的r3生成10个[0,100)之间的随机整数:");
Random r3 = new Random(13); // 使用固定的种子数13
for (int i = 0; i < 10; i++) {
System.out.print(r3.nextInt(100)+" ");
}
System.out.println();
System.out.print("种子数13的r4生成10个[0,100)之间的随机整数:");
Random r4 = new Random(13); // 使用固定的种子数13
for (int i = 0; i < 10; i++) {
System.out.print(r4.nextInt(100)+" ");
}
}
}
2、常用方法
int | nextInt() | [0,Integer.MAX_VALUE) |
int | nextInt(int bound) | [0,bound) |
float | nextFloat() | [0.0,1.0) |
double | nextDouble() | [0.0,1.0) |
double | nextDouble(double bound) | [0.0,bound) |
boolean | nextBoolean() | true/false |
long | nextLong() | [0,Long.MAX_VALUE) |
long | nextLong(long bound) | [0,bound) |