C#中随机数的问题

时间:2012-03-30 02:42:17

标签: c# random numbers

我确定这个问题被问了很多,但我找不到任何可以帮助我的答案。我正在尝试在0和1之间创建一个随机双,并且我不断收到错误。

map[x,y].setBit((int) Math.Round(((((double)Random.Next(100))/100) * 1.3), 2);

我得到的错误说“非静态,方法或属性需要对象引用”System.Random.Next(int)“

2 个答案:

答案 0 :(得分:8)

错误消息可以准确地告诉您问题。 Random是一个班级。 Next是一种非静态方法。您需要该类的实例或对象引用才能使用该方法。

var random = new Random();
// use random.Next(upperLimit);

您应该注意,如果您在紧密循环中使用random,则需要在循环外创建实例并重用它,或者在更高级别(例如类的成员字段) )。类接种的方式,连续的实例将生成相同的“随机”值序列。 This is a common pit that people have fallen into


您还应该知道,根据您的用法,您将获得0到99之间的整数,转换为加倍,除以100 ...这是一种更直接的方法。只需使用NextDouble(),它给出的值大于或等于0且小于1.0。

double d = random.NextDouble();

答案 1 :(得分:3)

随机是一个类。 Random.Next()是一种非静态方法。

因此,您需要实例化Random类的实例。 (注意:正如Spender指出的那样,不要将这个本地化为循环...)

Random rnd = new Random();

map[x,y].setBit((int) Math.Round(((((double)rnd.Next(100))/100) * 1.3), 2);