最近写一个小程序的时候,用到了java 的random函数。于是详细地看了一下API文档,也去网上搜了一下相关资料。在这里对其做一个总结。
java一共存在两种random函数。
一、java.lang.math.random
该方法返回带正号的 double
值,该值大于等于 0.0
且小于 1.0
。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。也就是左闭右开的区间。借助下面的代码理解:
可以看出进行10次循环,0、1、2在此区间均匀分布。
需要注意的一点是Math.random返回的是double类型的值,需要其它类型的随机数时需要进行类型转化。
二、java.lang.util.random
对于API文档中的描述,总结起来就是:
1、该方法是一个伪随机的随即算法,根据一定的规则生成随机数,基于给定的种子数,生成给定区间的伪随机数。
2、生成的随机数在区间内近似均匀分布,也就是每个数字出现的几率相同。
3、随机数跟种子数有关,对于相同种子数的两个随机变量,它们生成的随机序列是一样。这一点在下文会有验证。
这里的random有两个构造方法:
random()--创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。
random(long seed)--使用单个long
种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值,该生成器可通过方法next(int)
维护。 调用new Random(seed)
等效于:
Random rnd = new Random(); rnd.setSeed(seed);
无参构造器会以与默认的系统时间相关的数字作为种子,以保证“该值与此构造方法的所有其他调用所用的值完全不同”。
有参构造器会使用给定的合法的参数。
需要注意:使用给定的合法种子时,种子数只是随机数的起源数字,跟生成随机数的范围区间无关,区间是由nextInt(int m)中的参数m确定。
Random rand =new Random();int i;i=rand.nextInt(100);
参数30开始并没有起作用(注意:并非不起作用),
nextInt(100)中的参数100规定了随机数的范围为0-100,可以取0,取不到100。
至于给定种子数有什么作用,下面以例子来解释一下。
由图可见,种子数一样时,两个随机数序列是一样的。
然后改一下,如下所示:
序列不一样了。
最后总结一下:
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow