Java-Random类

本文介绍了Java中的Random类,用于生成伪随机数。尽管这些数字看似随机,实际上是由种子和调用顺序确定的。通过示例展示了即使种子相同,调用顺序改变也会导致生成的随机数序列变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

撰写时间:2019年04月26日

Random类是专门用来生成一个伪随机数的类,它产生的随机数是根据种子和顺序决定
的,当种子或者顺序两个因素其中一个改变时,那么Random类产生的伪随机数就会发
生改变。
Random产生的数字并不是真正的随机的,而是一种伪随机,为什么说Random类产生的
随机数是伪随机数,因为它根据调用的顺序以及种子来确认它的随机的,它内部就是一
个固定的算法,这个算法需要种子作为参数,以及它调用的顺序,因为它调用了不同的
list,里面会进行不同的运算。不同的运算就会去修改它那个种子原生的运算。
下面会有例子展示:
普通展示各类型的随机数:

Random random = new Random();
	// Boolean
	// 每次执行 都有可能是false 或 true
	System.out.println("random.nextBoolean()=" + random.nextBoolean());
	// 数组 、随便给个长度
	byte[] bs = new byte[5];
	random.nextBytes(bs);
	System.out.println("random.nextBytes(bs)=" + Arrays.toString(bs));
	// 生成0.0~1.0之间的伪随机double数
	System.out.println("random.nextDouble() = " + random.nextDouble());
	//  生成0.0~1.0之间的伪随机float数
	System.out.println("random.nextFloat() = " + random.nextFloat());
	//  生成平均值是 0.0,标准差是 1.0的伪高斯数
	System.out.println("random.nextGaussian() = " + random.nextGaussian());
	//  生成一个处于int整数取值范围的伪随机整数
	System.out.println("random.nextInt() = " + random.nextInt());
	// 给指定范围的伪随机整数,不管执行多少次生成的整数都在0~20之间
	//  生成0~20之间的伪随机整数
	System.out.println("random.nextInt(20) = " + random.nextInt(20));
	//  生成一个处于long整数取值范围的伪随机整数
System.out.println("random.nextLong() = " + random.nextLong());

下面结果显示,执行了两次都是不一样的,虽然看起来像是随机的,但却不完全是随机的,
下面在写一个例子对比:

//一样的种子

long longValue = System.currentTimeMillis();
	Random random1 = new Random(longValue);
	System.out.println("第一个种子为longValue的Random对象");
	System.out.println("random1.nextBoolean()=" + random1.nextBoolean());
	System.out.println("random1.nextDouble() = " + random1.nextDouble());
	System.out.println("random1.nextFloat() = " + random1.nextFloat());
	System.out.println("random1.nextGaussian() = " + random1.nextGaussian());
	System.out.println("random1.nextInt() = " + random1.nextInt());
	Random random2 = new Random(longValue);
	System.out.println("第二个种子为longValue的Random对象");
	System.out.println("random2.nextBoolean()=" + random2.nextBoolean());
	System.out.println("random2.nextDouble() = " + random2.nextDouble());
	System.out.println("random2.nextFloat() = " + random2.nextFloat());
	System.out.println("random2.nextGaussian() = " + random2.nextGaussian());
	System.out.println("random2.nextInt() = " + random2.nextInt());
	Random random3 = new Random(longValue);
	System.out.println("第三个种子为longValue的Random对象");
	System.out.println("random3.nextBoolean()=" + random3.nextBoolean());
	System.out.println("random3.nextDouble() = " + random3.nextDouble());
	System.out.println("random3.nextFloat() = " + random3.nextFloat());
	System.out.println("random3.nextGaussian() = " + random3.nextGaussian());
System.out.println("random3.nextInt() = " + random3.nextInt());

(第一图)现在是种子顺序一样的,所以生成的随机数都是一样的,
(第二图)当把顺序改变了,那么生成的随机数就不一样了
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值