30

我只是想知道 C# 中的随机数生成器是如何工作的。我也很好奇如何制作一个从 1 到 100 生成随机整数的程序。

4

4 回答 4

32

您可以使用Random.Next(int maxValue)

返回:大于或等于零且小于 maxValue 的 32 位有符号整数;也就是说,返回值的范围通常包括零,但不包括 maxValue。但是,如果 maxValue 等于 0,则返回 maxValue。

var r = new Random();
// print random integer >= 0 and  < 100
Console.WriteLine(r.Next(100));

但是,对于这种情况,您可以使用Random.Next(int minValue, int maxValue),如下所示:

// print random integer >= 1 and < 101
Console.WriteLine(r.Next(1, 101);)
// or perhaps (if you have this specific case)
Console.WriteLine(r.Next(100) + 1);
于 2012-11-24T09:32:14.180 回答
24

我只是想知道 C# 中的随机数生成器是如何工作的。

这是特定于实现的,但伪随机数生成器的维基百科条目应该会给你一些想法。

我也很好奇如何制作一个从 1 到 100 生成随机整数的程序。

您可以使用Random.Next(int, int)

Random rng = new Random();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(rng.Next(1, 101));
}

请注意,上限是独占的——这就是我在这里使用 101 的原因。

您还应该注意一些与之相关的“陷阱” Random- 特别是,您不应该在每次想要生成随机数时都创建新实例,否则如果您在短时间内生成大量随机数,你会看到很多重复。有关更多详细信息,请参阅我关于此主题的文章。

于 2012-11-24T09:33:04.610 回答
0

我已经在互联网上搜索 RNG 有一段时间了。我看到的一切要么太复杂,要么不是我想要的。在阅读了几篇文章后,我能够想出这个简单的代码。

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)])
}

简单的解释,

  1. 创建一个一维整数数组。
  2. 用无序数填满数组。
  3. 使用 rnd.Next 获取将被选中的号码的位置。

这很好用。

要获得小于 100 的随机数,请使用

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  int[] d = new int[10] { 9, 4, 7, 2, 8, 0, 5, 1, 3, 4 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)]) + Convert.ToString(d[rnd.Next(10)]);
}

依此类推,用于 3、4、5 和 6 ... 位随机数。

希望这对某人有积极的帮助。

于 2013-03-13T11:18:24.770 回答
0

所以如果你像这样使用它就很容易了

Random random = new Random();

int answer = random.Next(0);
于 2021-03-16T13:56:35.003 回答