2012-06-13 2 views
4

У меня есть проблема с случайным числом порождающего в C#Случайных числа каждый .next() вызов [Multiple .next() в методе]

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

Так я использую это как код для случайных чисел:

private static readonly Random random = new Random(); 
private static readonly object syncLock = new object(); 

public static int RandomNumber(int min, int max) 
{ 
      lock (syncLock) 
      { // synchronize 
       return random.Next(min, max); 
      } 
} 

Теперь я хочу назвать .Next() несколько раз в тот же метод, чтобы генерировать случайный объект:

public void StartDuiven() 
{ 
    for (int i = 0; i <= 6; i++) 
    { 
     var d = new Duif(); 
     d.Naam = /*NameGenerator.GenRandomFirstName() +" "+ NameGenerator.GenRandomLastName()*/ "Jantje"; 
     d.GeboorteDatum = DateTime.Now; 
     d.Snelheid = Genrator.RandomNumber(0, 4); 
     d.Vliegtechniek = Genrator.RandomNumber(0, 4); 
     d.Vormpeil = Genrator.RandomNumber(0, 4); 
     d.Conditie = Genrator.RandomNumber(0, 4); 
     d.Aerodynamica = Genrator.RandomNumber(0, 4); 
     d.Intelligentie = Genrator.RandomNumber(0, 4); 
     d.Libido = Genrator.RandomNumber(0, 4); 
     d.Nachtvliegen = Genrator.RandomNumber(0, 4); 
     d.Navigatie = Genrator.RandomNumber(0, 4); 
     d.Ervaring = Genrator.RandomNumber(0, 4); 
     d.Transfer = false; 

     int g = Genrator.RandomNumber(0, 2); // Edited 

     if (g == 0) 
     d.Geslacht = false; 
     else 
     d.Geslacht = true; 

     AddDuif(d); 
    } 
} 

Каждый новый объект Я получаю другое число, но не каждый раз, когда я звоню. Next() способ.

Таким образом, все значения свойств становятся одинаковыми для одного объекта.

Как я могу это исправить? Почему бы мне не получить новое значение для каждого звонка .Next()?

Спасибо

Bye!

ответ

4

Random.Next(0, 1) всегда будет возвращать 0. Максимальное значение является эксклюзивным.

+0

Alright я буду делать, что 0,2 тогда. Любая идея о том, что каждый вызов .Next() возвращает то же самое? –

+0

+1 ответить ... @JonasBohez - случайные числа случайны, почему вы ожидаете, что они будут разными? Ваше ограничение «следующий номер не должно повторять предыдущий» делает для особого распространения, а не для обычного объекта Random. –

+0

Nvm на последнем вопросе, это была моя собственная ошибка где-то в другом месте:/Спасибо за 0,2 редактирование, хотя –

0

Попробуйте с

return (random.Next() % (max - min)) + min 
+0

Он работает с этим также благодаря! Хотя, я apolagize, я продолжал давать то же значение где-то. Извините за потраченное время: –

2

Благодаря классифицирует принцип трудно :), чтобы получить 5 отчетливое целое значение в диапазоне [0-4).

Поскольку числа случайны, вы должны ожидать, что будет некоторое количество случаев, когда все значения будут одинаковыми.

(в дополнение к ошибке, идентифицированной @IngisKahn с использованием Random.Next(0,1))

Смежные вопросы