为什么说Java中的随机数都是伪随机数

Java随机数产生原理:Java的随机数产生是通过线性同余公式产生的,也就是说通过一个复杂的算法生成的。伪随机数的不安全性:Java自带的随机数函数是很容易被黑客破解的,因为黑客可以通过获取一定长度的随机数序列来推出你的seed,然后就可以预测下一个随机数。不用种子的不随机性会增大的原因:java.Math....
为什么说Java中的随机数都是伪随机数
什么是伪随机数?
1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。
2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。
(随机这个属性和算法本身就是矛盾的)
3.通过真实随机事件取得的随机数才是真随机数。

Java随机数产生原理:

Java的随机数产生是通过线性同余公式产生的,也就是说通过一个复杂的算法生成的。
伪随机数的不安全性:

Java自带的随机数函数是很容易被黑客破解的,因为黑客可以通过获取一定长度的随机数序列来推出你的seed,然后就可以预测下一个随机数。

不用种子的不随机性会增大的原因:

java.Math.Random()实际是在内部调用java.util.Random()的,使用一个和当前系统时间有关的数字作为种子数。两个随机数就很可能相同。

double a = Math.random();

double b = Math.random();

Random r1 = new Random();

r1.nextInt(10);

Random r2 = new Random();

r2.nextInt(10);

Java中产生随机数的方法有两种:
第一种:Math.random()
第二种:new Random()

一、java.lang.Math.Random:

调用这个Math.Random()函数能够返回带正号的double值,取值范围是[0.0,1.0),在该范围内(近似)均匀分布。因为返回值是double类型的,小数点后面可以保留15位小数,所以产生相同的可能性非常小,在这一定程度上是随机数。

二、java.util.Random:
Random r1 = new Random();
Random r2 = new Random();

Random r3 = new Random(10);
Random r4 = new Random(10);

下面Random()的两种构造方法:

Random():使用一个和当前系统时间对应的相对时间有关的数字作为种子数。

Random(long seed):直接传入一个种子数。

种子的作用是什么?

种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。

举例:
Random r =new Random(100);
System.out.println(r.nextInt(20));

种子数只是随机算法的起源数字,和生成的随机数字的区间没有任何关系。

初始化时100并没有起直接作用(注意:不是没有起作用),r.nextInt(20)中的20是随机数的上限,产生的随机数为0-20的整数,不包括20。2017-01-16
mengvlog 阅读 47 次 更新于 2025-09-09 16:11:17 我来答关注问题0
  • 1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。(随机这个属性和算法本身就是矛盾的)3.通过真实随机事件取得的随机数才是真随机数。Java随机数产生原理:Java的随机数产生是通过线性...

  •  百度网友897f8f0804 java 随机数每次系统运行后结果都一样?

    因为你使用了带参数的构造方法,那个参数(1)就是生成随机数的规则,所以每次生成的都是一样的数字,如果想每次的数字都不一样的话可以Random r = new Random(System.currentTimeMillis());或者Random r = new Random();使用无参构造方法,要了解随机数生成规则可以去深入查看源码。

  •  文暄生活科普 Java随机数 Random、SecureRandom、ThreadLocalRandom、Math.random()

    Java中提供了多种随机数生成方式,主要包括伪随机型和安全型两种。以下是对Java中Random、SecureRandom、ThreadLocalRandom以及Math.random()的详细解析:1. Math.random()类型:伪随机型。功能:随机生成一个double类型[0,1)区间的值。特点:由于其实现方式较为简单,效率低下,因此在现代Java开发中已基...

  •  翡希信息咨询 Java中生成随机数的4种方式!

    伪随机的Random类:特点:Java中最为基础的随机数生成工具,生成的随机数是伪随机,即线性同余法的产物。种子默认设置为当前的纳秒时间,提供了很高的效率。线程安全性:是线程安全的,通过原子操作确保了多线程环境下的一致性。用法:可以生成指定范围内的随机数,但随机序列在种子相同的情况下是可预测的。

  •  文暄生活科普 Java生成随机数—random()和Random类详解!

    总的来说,Random类在Java随机数生成中提供了更大的灵活性和控制性。无论是简单的double范围,还是复杂的条件生成,Random类都是一个强大的工具。对于更深入的Java学习,特别是对于零基础的初学者,推荐观看Java300集教程,它为Java基础学习提供了简单易懂的视频资源,无论你是新手还是有一定基础,都能...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部