和随机数相关的类Random

Random类的典型应用

1.代码示例

import java.util.*;

public class RandomTest
{
	public static void main(String[] args)
	{
		Random rand = new Random();
		System.out.println("rand.nextBoolean():"
			+ rand.nextBoolean());
		// 生成0.0~1.0之间的伪随机double数
		System.out.println("rand.nextDouble():"
			+ rand.nextDouble());
		// 生成0.0~1.0之间的伪随机float数
		System.out.println("rand.nextFloat():"
			+ rand.nextFloat());
		// 生成平均值是 0.0,标准差是 1.0的伪高斯数
		System.out.println("rand.nextGaussian():"
			+ rand.nextGaussian());
		// 生成一个处于int整数取值范围的伪随机整数
		System.out.println("rand.nextInt():" + rand.nextInt());
		// 生成0~26之间的伪随机整数
		System.out.println("rand.nextInt(26):" + rand.nextInt(26));
		// 生成一个处于long整数取值范围的伪随机整数
		System.out.println("rand.nextLong():" +  rand.nextLong());
	}
}

2.运行结果

rand.nextBoolean():false
rand.nextDouble():0.6082686512760977
rand.nextFloat():0.61762995
rand.nextGaussian():-1.0508181648317052
rand.nextInt():514232001
rand.nextInt(26):5
rand.nextLong():-8195242260307854387

3.代码说明

Random类可以提供很多方法生成伪随机数。

Random类种子的应用

1.代码示例

import java.util.*;

public class SeedTest
{
	public static void main(String[] args)
	{
		Random r1 = new Random(50);
		System.out.println("第一个种子为50的Random对象");
		System.out.println("r1.nextBoolean():\t" + r1.nextBoolean());
		System.out.println("r1.nextInt():\t\t" + r1.nextInt());
		System.out.println("r1.nextDouble():\t" + r1.nextDouble());
		System.out.println("r1.nextGaussian():\t" + r1.nextGaussian());
		System.out.println("---------------------------");
		Random r2 = new Random(50);
		System.out.println("第二个种子为50的Random对象");
		System.out.println("r2.nextBoolean():\t" + r2.nextBoolean());
		System.out.println("r2.nextInt():\t\t" + r2.nextInt());
		System.out.println("r2.nextDouble():\t" + r2.nextDouble());
		System.out.println("r2.nextGaussian():\t" + r2.nextGaussian());
		System.out.println("---------------------------");
		Random r3 = new Random(100);
		System.out.println("种子为100的Random对象");
		System.out.println("r3.nextBoolean():\t" + r3.nextBoolean());
		System.out.println("r3.nextInt():\t\t" + r3.nextInt());
		System.out.println("r3.nextDouble():\t" + r3.nextDouble());
		System.out.println("r3.nextGaussian():\t" + r3.nextGaussian());
	}
}

2.运行结果

第一个种子为50的Random对象
r1.nextBoolean(): true
r1.nextInt():  -1727040520
r1.nextDouble(): 0.6141579720626675
r1.nextGaussian(): 2.377650302287946
---------------------------
第二个种子为50的Random对象
r2.nextBoolean(): true
r2.nextInt():  -1727040520
r2.nextDouble(): 0.6141579720626675
r2.nextGaussian(): 2.377650302287946
---------------------------
种子为100的Random对象
r3.nextBoolean(): true
r3.nextInt():  -1139614796
r3.nextDouble(): 0.19497605734770518
r3.nextGaussian(): 0.6762208162903859

3.代码说明

从运行结果来看,只要两个Random对象种子相同,而且方法的调用顺序也相同,他们就会生成相同的数字序列。也就是说,Random生成的数字并不是真正的随机数,而是伪随机数。为了避免两个Random对象产生的相同的数字序列,通常推荐使用当前时间作为Random对象的种子。

猜你喜欢

转载自cakin24.iteye.com/blog/2321964