哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在优快云上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。
本文主要讲解java实现随机数的几种案例,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬
✨✨✨个人主页:java-WangHY
Java中的随机数是怎样产生的呢?
🍎1、Java.Util.Random类
🌾🤡🐢✨🤙💎
util包里面提供的Random类
通过剖析源码发现java.util.Random()有两种构造形式:
1、Random()
/**
* 创建一个新的随机数生成器。
* 此构造函数将随机数生成器的种子设置为一个很可能与此构造函数的任何其他调用不同的值。
*/
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
2、Random(long seed)
/**
* 使用单个long种子创建新的随机数生成器。种子是通过方法next(int)维护的伪随机数发生器的内部状态的初始值。
* 调用new Random(seed)相当于:
* Random rnd = new Random(); rnd.setSeed(seed);
* 参数:seed - 初始种子
*/
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);
}
}
'区别:'
带有种子的Random类实例,如果随机种子相同那么每次随机生成的结果是一样的;
不带有随机种子的Random实例,每次随机生成的结果都是随机的
'原因:'
不带有随机种子的Random类实例,是以当前时间(System.currentTimeMillis()为初始种子的,
这个最后有讲解),这个时间永远不可能重复(就像代码自上而下运行,对象也是依次创建)
所以不带有随机种子的Random实例每次随机生成的结果都是随机的。
📈实例
import java.util.Random;
/**
* @Author jinhuan
* @Date 2022/3/6
*
* 实例化两对Random对象,一对带种子、一对不带种子,下面通过代码简单展示二者的区别
*/
public class RandomTest {
public static void main(String[] args) {
//实例化带种子的Random对象
Random random01 = new Random(10);
//等价于 Random random02 = new Random().setSeed(10);
Random random02 =