2015-01-24 3 views
0

Я пытаюсь вернуть новое значение каждый раз я называю этот метод, в настоящее время каждый раз, когда он называется он постоянно возвращается то же значение:Возвращаясь новое значение каждый раз, когда я вызываю метод

public static int GenerateNumber() 
    { 
     Random randomNumber = new Random();    
     int number = randomNumber.Next(3, 19); 
     return number; 
    } 

тогда оно называется как таковой:

MeleeClass melee1 = new MeleeClass(GenerateNumber(), GenerateNumber(), GenerateNumber(), 50); 

Но когда я запускаю код, чтобы увидеть, что хранится в переменных, они имеют одинаковый номер. Заранее благодарю вас за помощь, извините за любые ошибки в форматировании, это моя первая публикация.

ответ

2

Определить randomNumber вне метода.

static Random randomNumber = new Random();    

public static int GenerateNumber() 
{ 
    int number = randomNumber.Next(3, 19); 
    return number; 
} 

Ссылка, предоставленная Стивом, объясняет это хорошо. Вкратце, когда вы создаете экземпляр Random, он его использует с помощью Environment.TickCount, который затем влияет на «случайный» номер, который вы получаете.

Если вы вызывали этот метод один раз в секунду, например, вы могли бы оставить свой код как есть и все еще получать случайные числа. Но когда вы вызываете метод несколько раз быстрее, тем самым быстро создавая Random, «случайные» значения обычно не являются случайными.

Ссылка (предоставляется Руф): Random Class - Avoiding multiple instantiations

+0

Ха-ха, спасибо больших людей. Это сработало, можете ли вы дать небольшое объяснение, почему оно не работает? – Glyfender

+1

http://stackoverflow.com/questions/767999/random-number-generator-only-generating-one-random-number?rq=1 – Steve

+1

Этот класс также имеет довольно хорошую документацию. Прокрутите вниз немного: https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx –