【发布时间】:2014-06-14 17:54:37
【问题描述】:
我将如何使用随机数生成器来生成 1 或 -1 但不生成 0。到目前为止,我有:xFacingDirection = randomise.Next(-1,2); 但这冒着生成数字 0 的风险。我将如何去做接受 0 或继续尝试一个数字,直到它不是 0。
非常感谢
【问题讨论】:
我将如何使用随机数生成器来生成 1 或 -1 但不生成 0。到目前为止,我有:xFacingDirection = randomise.Next(-1,2); 但这冒着生成数字 0 的风险。我将如何去做接受 0 或继续尝试一个数字,直到它不是 0。
非常感谢
【问题讨论】:
这个呢:
var result = random.Next(0, 2) * 2 - 1;
为了解释这一点,random.Next(0, 2) 只能产生 0 或 1 的值。当您将其乘以 2 时,它会得到 0 或 2。只需减去 1 即可得到 -1 或 1。
一般来说,要随机产生 n 个整数之一,均匀分布在最小值 x 和最大值 y 之间,包括在内,你可以使用这个公式:
var result = random.Next(0, n) * (y - x) / (n - 1) + x;
例如替换 n=4, x=10, 和 y=1 将在集合 { 1, 4 中生成随机数, 7, 10 }。
【讨论】:
您还可以使用ternary operator 来确定要使用的号码。
int number = (random.Next(0, 2) == 1) ? 1 : -1);
计算结果为
if (random.Next(0, 2) == 1)
number = 1;
else
number = -1;
【讨论】:
这是我的实现。与上述类似,但略有不同。想出更多答案可以帮助你更多。
public int result()
{
// randomly generate a number either 1 or -1
int i;
Random rando = new Random();
i = rando.Next(0, 2);
if (i == 0)
{
i = -1;
}
return i;
}
【讨论】: