对于循环并不总是更新C#

时间:2015-06-17 13:45:45

标签: c# for-loop

我遇到了一个奇怪的问题。当我运行以下代码时,我的每个文本框都填充了相同的随机生成的数字。

public void diceAdd()
    {
        int[] die = new int[4];
        for(int i = 0; i < total.Length; i++)
        {
            for (int r = 0; r < die.Length; r++)
            {
                //Simulates rolling a 6 sided die
                Random rand = new Random();
                randomNumber = rand.Next(1, 7);
                die[r] = randomNumber;
            }
            int smallest = die[0];
            for (int c = 1; c < die.Length; ++c)
            {
                if (die[c] < smallest)
                {
                    smallest = die[c];
                }
            }
            total[i] = die[0] + die[1] + die[2] + die[3] - smallest;
        }
        strTxt.Text = total[0].ToString();
        dexTxt.Text = total[1].ToString();
        conTxt.Text = total[2].ToString();
        intTxt.Text = total[3].ToString();
        wisTxt.Text = total[4].ToString();
        chaTxt.Text = total[5].ToString();

问题是,如果我添加此消息框

MessageBox.Show(i.ToString());

total[i] = die[0] + die[1] + die[2] + die[3] - smallest;

每个数字都按预期获得独特的输出。

我认为它与线程有关,但我想在弄乱之前我会问这里。

1 个答案:

答案 0 :(得分:4)

每次在循环中重新创建随机数生成器,在循环之前创建一个:

  Random rand = new Random();

  for(int i = 0; i < total.Length; i++)
  {
    ...
  }

另请参阅herehere,它解释了为什么数字不会改变