C#WriteLine内部循环生成随机数,仅在结果100x上写入

时间:2014-07-07 18:34:56

标签: c# loops streamwriter

我正在用C#编写一个类项目的应用程序,并且在编写结果时遇到了麻烦。它应该模拟滚动一对骰子100次并将结果写出到顺序文件。当我运行代码时,循环只为所有100条记录写出一个结果(即5,2)。有什么想法吗?当我在write语句中放置一个断点时,它会显示值已经改变,但似乎没有写入。

        private void button1_Click(object sender, EventArgs e)
    {
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"c:\temp\dicerolls.txt", false))


        for (int i = 0; i < 100; i++)
        {
            int dice1 = 0;
            int dice2 = 0;
            Random rnd = new Random();
            dice1 = rnd.Next(1, 7);
            dice2 = rnd.Next(1, 7);
            int result = dice1 + dice2;
            string display = Convert.ToString(result);
            string die1 = Convert.ToString(dice1);
            string die2 = Convert.ToString(dice2);
            lblDie1.Text = "Die 1 = " + die1;
            lblDie2.Text = "Die 2 = " + die2;
            lblResult.Text = "Total = " + display;

            file.WriteLine(Convert.ToString(dice1) + ","+Convert.ToString(dice2)+"\n");

        }
    }

1 个答案:

答案 0 :(得分:2)

您需要将Random对象移出循环范围。

创建随机对象时,它会创建一个种子,在该种子上生成伪随机数流。通过将随机数发生器放置在循环之外,它能够通过随机数流进行。通过调用Next,流进入下一个随机数。通过实例化循环内部,您实际上是在重置随机过程。

例如:

Random rnd = new Random();
for (int i = 0; i < 100; i++)
    {
        int dice1 = 0;
        int dice2 = 0;

        dice1 = rnd.Next(1, 7);
        dice2 = rnd.Next(1, 7);
        int result = dice1 + dice2;
        string display = Convert.ToString(result);
        string die1 = Convert.ToString(dice1);
        string die2 = Convert.ToString(dice2);
        lblDie1.Text = "Die 1 = " + die1;
        lblDie2.Text = "Die 2 = " + die2;
        lblResult.Text = "Total = " + display;

        file.WriteLine(Convert.ToString(dice1) + ","+Convert.ToString(dice2)+"\n");

    }