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

C# C WriteLine在循环内生成随机数,仅写入结果100x,c#,loops,streamwriter,C#,Loops,Streamwriter,我正在为一个班级项目用C语言编写一个应用程序,但在写出结果时遇到了困难。它应该模拟将一对骰子掷100次,并将结果写入一个顺序文件。当我运行代码时,循环只写出一个结果,即所有100条记录的5,2。你知道为什么吗?当我在write语句处放置断点时,它显示值已更改,但似乎没有写入任何内容 private void button1_Click(object sender, EventArgs e) { using (System.IO.StreamWriter f

我正在为一个班级项目用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");

        }
    }

您需要将随机对象移出循环的范围


创建随机对象时,它将创建一个种子,在该种子处生成伪随机数流。通过将随机数生成器放置在循环外部,它能够在随机数流中前进。流通过调用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");

    }

非常感谢你,当我在脑海中思考这个问题时,我仍然不明白为什么你的答案是正确的?我不知道重建一个随机对象是如何做到这一点的。你能给我指出正确的方向吗?当你创建随机对象时,它会创建一个种子,在这个种子上产生伪随机数流。通过将随机数生成器放置在循环外部,它能够在随机数流中前进,因为它不会重新开始。您实际上是在循环的每次迭代中重置流程。@user2554353请回答,您的问题是重复的。你应该在这两个地方找到一个非常详细的解释。再次感谢wbennett,我为重复的问题道歉。当你仍然不确定要搜索什么时,很难找到东西。