随机函数刷新

时间:2015-04-06 02:05:54

标签: c# random

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#创建一个骰子滚动模拟器,但我遇到一个问题:随机数在第一次滚动后永远不会改变。发生了什么,我该如何解决?

2 个答案:

答案 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();