6

我试图让我的程序输出 1 或 -1 这是我的代码,它唯一的输出是 -1。这根本不是随机的。

Random rnd = new Random();
int L = rnd.Next(0, 1);
if (L == 0)
{
    Console.WriteLine(-1);
}
else
{
    Console.WriteLine(1);
}
4

4 回答 4

12

第二个参数Random.Next(int, int)给出了一个排他的上限。所以你说你想要一个大于或等于0且小于1的整数。这并没有为0以外的数字提供很多范围:)

从文档中:

返回值
类型:System.Int32
大于等于 minValue 且小于 maxValue 的 32 位有符号整数;即返回值的范围包括minValue,但不包括maxValue。如果 minValue 等于 maxValue,则返回 minValue。

您还应该阅读我关于随机性的文章以避免其他常见问题。

于 2013-11-07T20:53:52.613 回答
7

rnd.Next(0, 1)返回i范围内的值0 <= i < 1。唯一这样的值是0

看看文档

最小值

类型:System.Int32

返回的随机数的包含下限。

最大值

类型:System.Int32

返回的随机数的唯一上限。maxValue 必须大于或等于 minValue。

请注意,minValue包容性的,而maxValue排斥性的。因此,更一般地说,这种重载的next()返回值在以下范围内:

minValue <= i < maxValue 

如果您不知道术语,在不平等的情况下,包容性手段<=or>=和排他性手段<or >

好吧,在 minValue == maxValue 的情况下,上面的不等式并不严格正确,但为了更清晰的说明,我选择忽略那个极端情况。

于 2013-11-07T20:54:43.863 回答
0

我试图让我的程序输出 1 或 -1 这是我的代码,它唯一的输出是 -1。这根本不是随机的。

您可以改用简单的算法:

int L = (rnd.Next (1, 3) * 2) - 3;
Console.WriteLine(L);
于 2013-11-07T21:26:34.570 回答
0

带有 2 个参数的 Random.Next 返回值 min <= < max

因此,您需要值 0 或 1,只需将代码更改为:rnd.Next(0, 2);- 这将返回 0 或 1

于 2013-11-07T20:56:54.140 回答