2015-03-03 3 views
-2

Зачем использовать метод RandomBool(), я всегда получаю 1? Пожалуйста, помогите исправить второй метод.Получить случайное целочисленное значение C#

static class Tools 
{ 
    public static int RandomNumber(int end) 
    { 
     var rand = new Random(DateTime.Now.Millisecond); 
     return rand.Next(0, end); 
    } 

    public static bool RandomBool() 
    { 
     if(RandomNumber(1) == 0) 
      return true; 
     else 
      return false; 
    } 
} 
+3

Прочитайте документацию по случайному классу, Второй параметр является ** эксклюзивным ** верхним пределом –

+3

Общеобразовательная ссылка: http://dilbert.com/strip/2001-10-25 – xanatos

+0

Две ошибки: не переучивать Случайные время. В противном случае вы повторно инициализируете его одним и тем же семенем, если функция вызывается дважды в той же миллисекунде. Поместите 'rand' в статическую переменную и будете счастливы. А затем, как написано другими, «RandomNumber (2)» – xanatos

ответ

1

Вы должны использовать этот код:

if(RandomNumber(2) == 0) 

Это включает в себя 0 и 1, но не включает 2 как Random исключает верхние границы.

В качестве альтернативы изменить return rand.Next(0, end); к return rand.Next(0, end + 1);

1

Это должно сделать трюк

if(RandomNumber(2) == 0) // <= Correction ; RandomNumber(2) will Return 0 OR 1 
      return true; 
    else 
      return false; 

Random.Next Метод: (MSDN)

Когда вы называете это, как это, Random.Next(MinValue,MaxValue), следующее правило применяется

32-разрядный значащее целое число больше или равно minValue и меньше maxValue. Диапазон возвращаемых значений включает minValue , но не maxValue.

В вашем случае, если вы использовали в качестве Min = 0 и Max =1, который всегда будет возвращать 0.

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