Java生成随机数原理_JAVA随机数生成的机制

一般我们都称计算机给的随机数为伪随机数,因为它们都不是真的随机的。你可能更愿意相信这些情况。即使他们是随机的,它们也在等待着我们的指示。当然也的确有些特定的方法,来生成它们。但我们可以联想到某个黑盒或我们的面包机,而这是个随机数生成器。于是你找到这个生成器说,嘿 生成器你发出一个信息,我得到了这个信息就是 下一个随机数。而它会返回一个于你来说随机的数,然后你说给我下一个 它又给你下一个。就是这么工作的。就想一个黑盒,你不管里面什么构造,对你来说就像是个面包机。

所以作为客户,如何使用这些随机数生成器呢?

你需要先导入随机数生成器的库,才能收获随机数生成器。

关于随机数生成器,比较有意思的是,生成器和以往的类别不同。

当我们需要类的某个对象时,我们说new就会得到一个新的对象。

随机数生成器有点不同,这里通过一个静态方法来获得实例对象,而不是通过new的构造器来生成。

此时有趣的是,当我们用到它时,我们希望能在所有方法里都是用同一个对象。所以你会说,你不是说过当我声明一个变量,这个变量只能在它被声明的方法内存在吗,所以怎么办?如果我们想要一个这种对象,我需要在每个方法内都调用一次吗?答案是:不用,有一个办法,如果我希望某个对象或变量,都能被我整个类别中的所以方法共用,我们就要用到 实例变量。

实例变量:意思就是,我想要一个存在于整个对象中的变量,而令所以方法都能指向这个相同的变量。

因此我们有必要比较一下实例变量和局部变量。关于他们如何被声明,我们如何使用它们。它们的结构,以及为什么会使用它们。

实例变量是在类里面被声明,而不是在方法里。

局部变量对应局部运算。

全局变量是一种很不好的数据类型,让你们远离它的方法,就是不告诉你们。

随机数生成器的原理:很奇怪的是,当你找它要一个数,比方说它给你5,然后我们偷偷把生成器里的普通咖啡换成了咖啡片,它偷偷地干了什么呢?它偷偷地保存了这个数(5),并且将之用在某个复杂的方程中,而你不需要关心这个方程是如何的,因为生成下一个数字的是这个黑盒。当你需要下一个数时,它就会对5动手脚,而后给你新的东西。所以问题是,你不知道这个生成器从哪个数开始,实际上它从哪个数开始和你计算机上的时间有关,将一秒钟60等分甚至千等分。所以大多数人不知道怎么回事,如果你不知道它怎么来的,你也就不知道这随机数列是什么。唯一的问题是,如果你不知道它怎么来的,你运行了程序突然出错了,第一次它在17的时候死机,你就想着要把这个错误找出来,于是你重新运行程序,这次你得到了个6,程序正常…我要你每次都用同一条序列的随机数,就抓哟指定每次开始的那个数,那么你就能从这个数开始每次都生成同一序列的随机数。如果开始的数是1,每次你说nextRandom,你得到的都是来自相同序列的随机数,比如7、5、9、2、3。下次运行时还是这个序列,这样调试起来就很轻松了。

Q&A:

seed不定要在区间内,多数情况下 seed的值是完全不相关的,基本上你在调试时才把它加进去。当你程序能运行时,把它拿出来。看看程序是否还运行。

如果在不同的计算机上用相同的seed,会得到相同的序列吗?

答案是YES.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值