Java 解惑:Random 种子的作用、含参与不含参构造函数区别

您所在的位置:网站首页 random函数的作用是什么 Java 解惑:Random 种子的作用、含参与不含参构造函数区别

Java 解惑:Random 种子的作用、含参与不含参构造函数区别

2024-07-09 22:18| 来源: 网络整理| 查看: 265

Random 通常用来作为随机数生成器,它有两个构造方法:代码语言:javascript复制 Random random = new Random(); Random random2 = new Random(50);

1.不含参构造方法:

代码语言:javascript复制public Random() { setSeed(System.nanoTime() + seedBase); ++seedBase; }

2.含参构造方法:

代码语言:javascript复制public Random(long seed) { setSeed(seed); }

都调用的 setSeed 方法:

代码语言:javascript复制public synchronized void setSeed(long seed) { this.seed = (seed ^ multiplier) & ((1L > (48 - bits)); }

其他 nextXXX 方法都是调用的 next()。

比如 nextInt(int):

代码语言:javascript复制public int nextInt(int n) { if (n > 31); } int bits, val; do { bits = next(31); val = bits % n; } while (bits - val + (n - 1) < 0); return val; }

再比如 nextBoolean():

代码语言:javascript复制//也是调用的 next() public boolean nextBoolean() { return next(1) != 0; }举个栗子:代码语言:javascript复制@Test public void testRandomParameter(){ System.out.println("Random 不含参构造方法:"); for (int i = 0; i < 5; i++) { Random random = new Random(); for (int j = 0; j < 8; j++) { System.out.print(" " + random.nextInt(100) + ", "); } System.out.println(""); } System.out.println(""); System.out.println("Random 含参构造方法:"); for (int i = 0; i < 5; i++) { Random random = new Random(50); for (int j = 0; j < 8; j++) { System.out.print(" " + random.nextInt(100) + ", "); } System.out.println(""); } }

分别用含参构造方法和不含参构造方法创建 5 个随机生成器对象,每个随机生成器再生产 8 个随机数,对比下结果:

这里写图片描述这里写图片描述

再运行一次:

这里写图片描述这里写图片描述总结:

通过上述例子可以发现:

随机数是种子经过计算生成的。

不含参的构造函数每次都使用当前时间作为种子,随机性更强而含参的构造函数其实是伪随机,更有可预见性


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3