Проблема со случайными числами в C # - PullRequest
1 голос
/ 30 марта 2012

Я уверен, что этот вопрос задают много, но я нигде не могу найти ответ, который мне помогает.Я пытаюсь создать случайное двойное число от 0 до 1 и продолжаю получать ошибки.

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

полученная ошибка говорит: «Ссылка на объект требуется для нестатического метода или метода"System.Random.Next (INT)"

Ответы [ 2 ]

8 голосов
/ 30 марта 2012

Сообщение об ошибке сообщает вам точно проблему.Random это класс.Next - нестатический метод.Вам нужен экземпляр или ссылка на объект класса, чтобы использовать этот метод.

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

Вы должны заметить, что если вы используете random в узком цикле, вы захотите создатьэкземпляр вне цикла и его повторное использование, или на более высоком уровне (например, поле члена класса).При способе заполнения класса последовательные экземпляры будут генерировать одинаковые «случайные» последовательности значений. Это обычная яма, в которую попали люди .


Вы также должны знать, что в зависимости от вашего использования вы получаете целое число от 0 до 99, приводя к удвоениюи деление на 100 ... есть более простой подход.Просто используйте NextDouble(), который дает значение больше или равно 0 и меньше 1,0.

double d = random.NextDouble();
3 голосов
/ 30 марта 2012

Случайный класс.Random.Next () - нестатический метод.

Поэтому вам необходимо создать экземпляр класса Random.(Примечание: как указал Спендер, не делайте это локальным для цикла ...)

Random rnd = new Random();

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