执行:
int i = 0;
while (i <= 100)
{
   Random random = new System.Random();
   int ran = random.Next(3);
   Console.WriteLine(ran);
   i++;
}
发现打印出来的随机数,都是同一个值,不得其解,求救!

解决方案 »

  1.   


            //
            // 摘要:
            //     返回一个小于所指定最大值的非负随机数。
            //
            // 参数:
            //   maxValue:
            //     要生成的随机数的上限(随机数不能取该上限值)。 maxValue 必须大于或等于零。
            //
            // 返回结果:
            //     大于等于零且小于 maxValue 的 32 位带符号整数,即:返回值的范围通常包括零但不包括 maxValue。 不过,如果 maxValue
            //     等于零,则返回 maxValue。
            //
            // 异常:
            //   System.ArgumentOutOfRangeException:
            //     maxValue 小于零。
            public virtual int Next(int maxValue);输出应该是0 1 2 吧
      

  2.   

    List<int> num=new List<int>();
    while (num.count<100)
    {
      Random random = new System.Random();
      int ran = random.Next(3);
       if(!num.Contain(num)
        num.Add(ran);
    }for(int i=0;i<num.count;i++)
    {
     Console.WriteLine(i);
    }
      

  3.   

    通常我们产生随机数的时候 用循环的话 如果Random放在循环里面定义的话
    Random random = new System.Random();
    然后取的话,貌似是非常容易产生一样的 具体原因没研究过。
      

  4.   

      Random random = new System.Random();这句话整个程序一般只需要一个,尤其不能放在循环里,因为随机种子是时间相关的,循环里执行的速度是很快的,得到random类实例都是一样了。这应该是个很简单的问题吧,怎么会楼上有标有星都迷迷糊糊呢?奇怪
      

  5.   

    我已经没再用random好久了我拿随机数是用 Guid.NewGuid() 这个函数
    它生成几乎不会重复的一个长字符串
    然后我再把字符串转化成int,这里有很多种方法,不一一描述了。
      

  6.   

    把 Random random = new System.Random(); 放到循环外面就可以了。PS:建议你循环的中间间隔个30~50毫秒,这样出来的随机数平均分布性更好