【发布时间】:2013-11-07 20:52:20
【问题描述】:
我正试图让我的程序输出 1 或 -1 这是我的代码到目前为止,它的唯一输出是 -1。这根本不是随机的。
Random rnd = new Random();
int L = rnd.Next(0, 1);
if (L == 0)
{
Console.WriteLine(-1);
}
else
{
Console.WriteLine(1);
}
【问题讨论】:
我正试图让我的程序输出 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。
您还应该阅读我的article on randomness 以避免其他常见问题。
【讨论】:
rnd.Next(0, 1) 在0 <= i < 1 范围内返回一个值i。唯一这样的值是0。
最小值
类型:System.Int32
返回的随机数的下限。
最大值
类型:System.Int32
返回的随机数的唯一上界。 maxValue 必须大于或等于 minValue。
请注意,minValue包含,maxValue独占。因此,更笼统地说,next() 的重载会返回以下范围内的值:
minValue <= i < maxValue
如果您不了解该术语,在不等式的上下文中,包含 表示<= 或>=,排他表示< 或>。
好吧,上面的不等式在 minValue == maxValue 的情况下并不严格,但为了更清晰的说明,我选择忽略那个极端情况。
【讨论】:
带有 2 个参数的 Random.Next 返回值 min
所以,您需要值 0 或 1,只需将代码更改为:rnd.Next(0, 2); - 这将返回 0 或 1
【讨论】:
我正试图让我的程序输出 1 或 -1 这是我目前的代码,它唯一的输出是 -1。这根本不是随机的。
您可以改用简单的算法:
int L = (rnd.Next (1, 3) * 2) - 3;
Console.WriteLine(L);
【讨论】: