我试图让我的程序输出 1 或 -1 这是我的代码,它唯一的输出是 -1。这根本不是随机的。
Random rnd = new Random();
int L = rnd.Next(0, 1);
if (L == 0)
{
Console.WriteLine(-1);
}
else
{
Console.WriteLine(1);
}
第二个参数Random.Next(int, int)
给出了一个排他的上限。所以你说你想要一个大于或等于0且小于1的整数。这并没有为0以外的数字提供很多范围:)
从文档中:
返回值
类型:System.Int32
大于等于 minValue 且小于 maxValue 的 32 位有符号整数;即返回值的范围包括minValue,但不包括maxValue。如果 minValue 等于 maxValue,则返回 minValue。
您还应该阅读我关于随机性的文章以避免其他常见问题。
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 的情况下,上面的不等式并不严格正确,但为了更清晰的说明,我选择忽略那个极端情况。
我试图让我的程序输出 1 或 -1 这是我的代码,它唯一的输出是 -1。这根本不是随机的。
您可以改用简单的算法:
int L = (rnd.Next (1, 3) * 2) - 3;
Console.WriteLine(L);
带有 2 个参数的 Random.Next 返回值 min <= < max
因此,您需要值 0 或 1,只需将代码更改为:rnd.Next(0, 2);
- 这将返回 0 或 1