StringBuilder sb = new StringBuilder();for (int i = 0; i < 3; i++)
{
   sb.Append(tb.GetRNDDh() + "<br/>");
}
Label1.Text =sb.ToString();代码如上,循环中的tb.GetRNDDh() 方法返回一个包含不同的随机数字符串,如果打断点执行的话,3次循环返回的结果是不一样的,如下
31 26 13 21 11 32 
17 06 02 26 10 30
12 07 03 27 29 16 如果不打断点执行,3次循环返回的结果是一样的,如下
15 32 02 10 18 33 
15 32 02 10 18 33 
15 32 02 10 18 33 请问这是怎么回事?

解决方案 »

  1.   

    tb.GetRNDDh随机数生成算法可能和时间有关,
      

  2.   

    把GetRNDDh的代码贴出来看看,
      

  3.   

    估计你的GetRNDDh()这个随机方法是与时间有关的, 不打断点直接循环由于太快, 所以三次结果一样;
    打断点之后时间错动了所以结果变了. 
      

  4.   

    随机数都是伪随机的。你的代码等同于 在 for 循环里Random rm= new Random();应该放在循环外
      

  5.   

    应该放在循环里,每次执行的new一个随机数。这才是随机。
      

  6.   

    GetRNDD方法代码如下:请高手看看有什么问题
         
    public string GetRNDDh()
            {
                string dh = "";
                Random rnd = new Random();
                int i = 0;
                while (i < 6)
                {
                    int num = rnd.Next(1, 34); //返回1-33之间的一个随机整数
                      string strnum = "";
                    if (num < 10)
                        strnum = "0" + num.ToString();
                    else
                        strnum = num.ToString();
                    if (dh.IndexOf(strnum) != -1)
                    {
                        continue; //有重复号码,退出本次循环
                    }
                    else
                    {
                        dh = dh + strnum + " ";
                        i++;
                    }
                }
                return dh.Trim();
            }
      

  7.   

    搞定了,把Random rnd = new Random();放到while循环第一句int num = rnd.Next(1, 34); 之前就可以了,不过循环次数多了依然有重复的,怎么彻底解决这个问题?
      

  8.   


    //using System.Threading;
    Thread.Sleep(5);
      

  9.   

    随机数也就是  Random 默认是使用 毫秒(Environment.TickCount) 作为参考值的,所以在瞬间产生的随机数是一致的,而如果断点的话,有造成时间间隔,产生的随机数就是不一样的了
    解决方法就是 Random 的参考值(种子值)设置唯一值即 Guid 就可以了Random random = new Random(Guid.NewGuid().GetHashCode());
      

  10.   

    本帖最后由 net_lover 于 2011-11-17 09:10:57 编辑