黑马程序员技术交流社区

标题: random(int seed)-伪随机数怎么理解? [打印本页]

作者: Doublekill    时间: 2014-3-23 18:28
标题: random(int seed)-伪随机数怎么理解?
本帖最后由 Doublekill 于 2014-3-23 20:17 编辑

// 摘要:
        //     使用与时间相关的默认种子值,初始化 System.Random 类的新实例。
        public Random();
        //
        // 摘要:
这是定义上面的:      
  //     使用指定的种子值初始化 System.Random 类的新实例。
        //
        // 参数:
        //   Seed:
        //     用来计算伪随机数序列起始值的数字。如果指定的是负数,则使用其绝对值。
        public Random(int Seed);

求举个简单的例子怎么用它
作者: threederek    时间: 2014-3-23 18:38
随机数其实根据特定规则计算出来串数字
例:
原始数字:a 默认 1
计算规则:*3
运行
Random theRandom=new Random(int Seed)
生成随机数 seed*3 , seed*6 , seed*9...根据seed值变化
Random theRandom=new Random()
运用默认值1
运行结 3,6,9...
般seed值设当前时间
作者: Doublekill    时间: 2014-3-23 19:17
threederek 发表于 2014-3-23 18:38
随机数其实根据特定规则计算出来串数字
例:
原始数字:a 默认 1

Random r;
r=new Random(DateTime.Now);//这个地方能这样写吗?
int a=r.next(0,9);
作者: 茹化肖    时间: 2014-3-23 20:10
Doublekill 发表于 2014-3-23 19:17
Random r;
r=new Random(DateTime.Now);//这个地方能这样写吗?
int a=r.next(0,9);

可以空着,但是注意不要放在循环里
作者: Doublekill    时间: 2014-3-23 20:16
茹化肖 发表于 2014-3-23 20:10
可以空着,但是注意不要放在循环里

恩,我刚才就出现这个问题了。。三Q
作者: threederek    时间: 2014-3-23 20:23
Doublekill 发表于 2014-3-23 19:17
Random r;
r=new Random(DateTime.Now);//这个地方能这样写吗?
int a=r.next(0,9);

一般都是空着
作者: cancle    时间: 2014-3-23 20:48
额,一般创建随机数的对象,都是放外面,放外面的话会发生出现的随机数都是相同的。你可以试试
如果写到外面,随机数是很小几率重复的
  1. Random r = new Random();
  2.             int[] nums = new int[10];
  3.             for (int i = 0; i < nums.Length; i++)
  4.             {
  5.                 nums[i] = r.Next(0, 100);//出来的随机数是0-99的随机数
  6.             }
  7.             foreach (var item in nums)
  8.             {
  9.                 Console.Write(item + " ");
  10.             }
  11.             Console.ReadKey();
复制代码

但你要是写到for循环里面,随机数在相同的时间内的随机数是相同的,好比下面的代码:
  1. int[] nums = new int[10];
  2.             for (int i = 0; i < nums.Length; i++)
  3.             {
  4.                 Random r = new Random();
  5.                 nums[i] = r.Next(0, 100);//出来的随机数是0-99的随机数
  6.             }
  7.             foreach (var item in nums)
  8.             {
  9.                 Console.Write(item + " ");
  10.             }
  11.             Console.ReadKey();
复制代码

这样的话,随机数都是相同的,你可以复制上去试试看。。这也是为什么叫它伪随机。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2