我正在用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");
}
}
答案 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");
}