随机种子 Random seed

来源:互联网 发布:java截取字符串前两位 编辑:程序博客网 时间:2024/04/29 01:42
http://blog.sina.com.cn/s/blog_4b3120470100k96z.html
Random类的基值seed是什么意思?
比如:
Random ran1=new Random();
Random ran2=new Random(12345);
这两个有什么区别啊?运行结果没区别啊!
生成随机数 Random random = new Random(); Random random = new Random(100);//指定种子数100 random调用不同的方法,获得随机数。 如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同 import java.util.*; class TestRandom { public static void main(String[] args) { Random random1 = new Random(100); System.out.println(random1.nextInt()); System.out.println(random1.nextFloat()); System.out.println(random1.nextBoolean()); Random random2 = new Random(100); System.out.println(random2.nextInt()); System.out.println(random2.nextFloat()); System.out.println(random2.nextBoolean()); } }
====================================================================
一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数,下面介绍两种方法: 
  一般种子可以以当前的系统时间,这是完全随机的 
  。 
  算法1:平方取中法。 
  1)将种子设为X0,并mod 10000得到4位数 
  2)将它平方得到一个8位数(不足8位时前面补0) 
  3)取中间的4位数可得到下一个4位随机数X1 
  4)重复1-3步,即可产生多个随机数 
  这个算法的一个主要缺点是最终它会退化成0,不能继续产生随机数。 
  算法2:线性同余法 
  1)将种子设为X0, 
  2)用一个算法X(n+1)=(a*X(n)+b) mod c产生X(n+1) 
  一般将c取得很大,可产生0到c-1之间的伪随机数 
  该算法的一个缺点是会出现循环。
=====================================================
0 0