2013-02-25 49 views
1

好的。几天前,我问了一个问题,如何在不使用数组的情况下生成100,1000,10000等随机数字,并且我的问题被删除了,因为可能答案并不那么明显。我用简单的解决方案得到了这一点,但现在我有另一个问题。我在这里尝试的是用不同的随机数填充每个动态创建的标签。我不知道每10行总是有什么原因得到相同的数字。这里是代码背后,我试图让工作:用随机数填充动态创建的控件

protected void btnExample1Random_Click(object sender, EventArgs e) 
{ 
    //Making the controls visible 
    this.Master.FindControl("Div1").Visible = true;   

    //Generating the random numbers 
    for (int i = 0; i < 10; i++) 
    { 
     Label randomTask = new Label(); 
     Label emptyTask = new Label(); 
     TextBox userInputTextBox = new TextBox(); 
     Random rnd = new Random(); 

     int caseInt = rnd.Next(1, 4), myNum = 0; 
     switch (caseInt) 
     { 
      case 1: 
       caseInt = 100; 
       myNum = rnd.Next(1, 100); 
       break; 
      case 2: 
       caseInt = 1000; 
       myNum = rnd.Next(1, 1000); 
       break; 
      case 3: 
       caseInt = 10000; 
       myNum = rnd.Next(1, 10000); 
       break; 
     } 

     //Forming the controls 
     randomTask.ID = "lbl" + i.ToString(); 
     randomTask.Text = caseInt.ToString() + " - " + myNum.ToString() + " "; 
     userInputTextBox.ID = "box" + i.ToString(); 
     emptyTask.ID = "check" + i.ToString(); 

     //Adding the controls into the placeholder 
     phTutorijal1.Controls.Add(randomTask); 
     phTutorijal1.Controls.Add(userInputTextBox); 
     phTutorijal1.Controls.Add(emptyTask); 
     phTutorijal1.Controls.Add(new LiteralControl("<br />")); 
    } 

    //Separating the next created controls into new line 
    phTutorijal1.Controls.Add(new LiteralControl("<br />")); 
} 

这个代码中有一个错误,我找不到它。生成占位符的每10行都使用相同的数字。我在这里错过了什么?

更新:迈克尔·刘发现在我的错误是:我需要把外面的Random rnd = new Random();为周期

+1

在'for'循环之前(外部)移动'Random rnd = new Random();' – 2013-02-25 22:20:22

+0

Aaaaah,谢谢迈克尔,没有看到:) – al1en 2013-02-25 22:21:44

回答

2

你得到相同的数字,因为你创建的循环随机实例。因此,它将用来自时间的相同种子初始化。你只需要声明它的循环之外:

Random rnd = new Random(); 
for (int i = 0; i < 10; i++) 
{ 
    int caseInt = rnd.Next(1, 4), myNum = 0; 

MSDN

从种子值的随机数生成开始。如果重复使用相同的 种子,则会生成相同的一系列数字。 ...