【发布时间】:2010-11-30 12:43:28
【问题描述】:
我正在编写一个随机问题生成器。我想从每个部分中选择一个问题。
如果范围大于 2(0,2/2+),则以 DateTime.Now.Milliseconds 作为种子值的随机类会生成随机数。但是,如果我在该范围内给出最小值 0 和最大值 1,它总是返回 0。
我是不是用错了。
如果有其他选择,请提出建议。
谢谢, 马赫什
【问题讨论】:
我正在编写一个随机问题生成器。我想从每个部分中选择一个问题。
如果范围大于 2(0,2/2+),则以 DateTime.Now.Milliseconds 作为种子值的随机类会生成随机数。但是,如果我在该范围内给出最小值 0 和最大值 1,它总是返回 0。
我是不是用错了。
如果有其他选择,请提出建议。
谢谢, 马赫什
【问题讨论】:
您正在调用Random.Next,它返回一个大于或等于第一个参数且小于但不等于第二个参数的随机整数。
具体来说,您要求的是[0, 1) 范围内的整数,该整数只能为零。
如果您要查找0 或1 的整数,则需要调用Random.Next(0, 2)。
如果您要查找0 和1 之间的实数,您需要致电Random.NextDouble。
【讨论】:
阅读 MSDN (Random.Next(int), Random.Next(int, int)) 你会发现上限总是排他的。也就是说,要获得一个介于 0 和 1 之间(包括两者)的数字,您可以这样做:
Random prng = new Random();
Console.WriteLine(prng.Next(0, 2)); //2 because it is exclusive
【讨论】:
MSDN:Random.Next 方法 (Int32) 返回小于指定最大值的非负随机数。 使用这个。
Random random = new Random();
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Genereted value:{0}", random.Next(2));
}
【讨论】: