Random rd = new Random();其实不是随机的,每次生成的都是相同的看似随机的序列。

解决方案 »

  1.   

                List<int> list = new List<int>();
                for (int i = 0; i < 100; i++)
                {
                    list.Add(new Random(DateTime.Now.Millisecond).Next(1, 8));
                    System.Threading.Thread.Sleep(1);
                }            foreach (var item in list)
                {
                    MessageBox.Show(item.ToString());
                }
      

  2.   

    如果在  aa.Add( rd.Next(1, 8));加断点的话值又开始随机了。不加断点就不行。为嘛?
      

  3.   

    Random 函数需要种子。种子不能一样。
      

  4.   


                List<int> aa = new List<int>();
                Random rd = new Random();            for (int a = 0; a < 10; a++)
                {
                    aa.Add(rd.Next(1, 8));
                }种子问题,
    系统这个种子和时间有关.
    你下面的一个一个的弹出所以感觉是对的.因为弹出你消耗了时间,所以下一个Random的种子就不一样的了.
    如果你短用控制台输出,后面一种情况也是一样的.楼主乳头不错.
      

  5.   

     Random rd = new Random();放在循环外面
      

  6.   


    随机数的生成是从种子值开始。 如果反复使用同一个种子,就会生成相同的数字系列。 产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。 默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。 但是,因为时钟的分辨率有限,所以,如果使用无参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。 
      

  7.   

    赞同楼上的,把Random rd = new Random();放在循环外面,下面有个例子
    DataTable  table = new DataTable();
    Random randomData = new Random();
    int j = 0;
    for (j = 1; j < 11; j++)
    {
           DataRow row = table_chart.NewRow();
           row[0] = j;
           row[1] = j * 9;       for (int k = 2; k < columns.Count; k++)
           {
                 row[k] = randomData.Next(1, 99);
           }
           table .Rows.Add(row);
    }
      

  8.   

    不好意思,直接从我的代码里COPY的,columns.Count可以自己改成一个常数。