Console.WriteLine("How many times would you like to roll?");
string count = Console.ReadLine();
int cnt = Convert.ToInt32(count);
for (int i = 1; i <= cnt; i++)
{
int rol = new int();
Random roll = new Random();
rol = roll.Next(1, 6);
Console.WriteLine("Die {0} landed on {1}.", i, rol);
}
Console.ReadLine();
我正在尝试用C#创建一个骰子滚动模拟器,但我遇到一个问题:随机数在第一次滚动后永远不会改变。发生了什么,我该如何解决?
答案 0 :(得分:2)
正如Alex指出的那样,你需要将它移出for循环。同样使用1,7而不是1,6,你会得到1到6的结果。
Console.WriteLine("How many times would you like to roll?");
string count = Console.ReadLine();
int cnt = Convert.ToInt32(count);
Random roll = new Random();
for (int i = 1; i <= cnt; i++) {
int rol = new int();
rol = roll.Next(1, 7);
Console.WriteLine("Die {0} landed on {1}.", i, rol);
}
Console.ReadLine();
答案 1 :(得分:0)
Random
逐个创建pseudo-random个数字。该随机数序列由种子数控制。如果它们的种子相同,则两个随机数序列将是相同的。序列中的数字是随机的:在某种意义上,您无法预测序列中的下一个数字。
如果Random
,种子从何而来?这取决于使用的构造函数。 Random()
创建默认种子。 Random(Int32)
使用调用代码传递的种子。
O.P.中的代码在循环的每次迭代中创建一个新的随机数生成器对象。每次,种子都是默认的。每次,伪随机数序列中的第一个数字都是相同的。
因此,在循环外创建一个Random
,并在循环的每次迭代中使用相同的Random
。
Console.WriteLine("How many times would you like to roll?");
string strCount = Console.ReadLine();
int n = Convert.ToInt32(strCount);
Random die = new Random();
for (int i = 1; i <= n; i++)
{
int roll = die.Next(1, 6);
Console.WriteLine("Die {0} landed on {1}.", i, roll);
}
Console.ReadLine();