C# C WriteLine在循环内生成随机数,仅写入结果100x
我正在为一个班级项目用C语言编写一个应用程序,但在写出结果时遇到了困难。它应该模拟将一对骰子掷100次,并将结果写入一个顺序文件。当我运行代码时,循环只写出一个结果,即所有100条记录的5,2。你知道为什么吗?当我在write语句处放置断点时,它显示值已更改,但似乎没有写入任何内容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
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,我为重复的问题道歉。当你仍然不确定要搜索什么时,很难找到东西。