我们经常说Java中的随机数是伪随机数,那么我们要知道什么是伪随机数。
什么是伪随机数?
1、真正意义上的随机数在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。这才是真随机。
2、计算机中的随机函数是按照确定算法模拟产生的,其结果是确定的,是可见的,我们可以这样认为这个可预见的结果其出现的概率是100%,所以被称为伪随机。
Java随机数产生原理:
Java的随机数产生用了线性同余公式等,也就是说通过一个复杂的算法生成的。如果感兴趣,可以去看一下这篇对java随机数源码解析的博客。http://www.codes51.com/article/detail_1581162_5.html
Java产生随机数的方法有两种:
1、Math.random()
2、new Random()
java.lang.Math.Random:
Math.Random()函数能够返回0-1之间的double值,在该范围内(近似)均匀分布。
java.util.Random:
Random()有两种构造方法:
1、Random():使用一个和当前时间的毫秒数作为种子,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。下面是JDK的源代码。
public Random() { this(System.currentTimeMillis()); }。
2、 Random(long seed):直接传入一个种子,如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
random对象的nextInt(),nextInt(int n)方法:
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 [0,1) 之间均匀分布的 int值。