我确定这个问题被问了很多,但我找不到任何可以帮助我的答案。我正在尝试在0和1之间创建一个随机双,并且我不断收到错误。
map[x,y].setBit((int) Math.Round(((((double)Random.Next(100))/100) * 1.3), 2);
我得到的错误说“非静态,方法或属性需要对象引用”System.Random.Next(int)“
答案 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);