2016-01-13 4 views
-3

Я использую класс Random для создания любого случайного целого числа, но она всегда возвращает один и тот же номерRandom всегда создает один и тот же номер

static Random rand = new Random(); 
public static int GetOrderID() 
{   
    return rand.Next(Math.Abs(int.MinValue + 1), int.MaxValue); 
} 

уведомления о том, что случайный класс является статическим и генерируется за пределами функции

+10

Подсказка: какое значение имеет значение 'Math.Abs ​​(int.MinValue + 1)'? Как он сравнивается с 'int.MaxValue'? Теперь, когда 'Next (x, x)' вернет 'x', ответ должен быть относительно ясным. :) –

ответ

6

что бы вы ожидать, если

Math.Abs(int.MinValue + 1) 

равно

int.MaxValue 

поэтому ваш ассортимент содержит только один номер.

2

Это просто: Вызов Math.Abs удалит знак из числа. Поскольку минимальное целое число равно -2,147,483,648, его абсолютное значение (приращение на 1) равно 2,147,483,647, что равно абсолютной величине для int.MaxValue.

Так что, позвонив по номеру Math.Abs(int.MinValue + 1), int.MaxValue, вы всегда получаете 2,147,483,647 в качестве возвращаемой стоимости, не так ли?

Если вам нужно любое произвольное значение int, вы можете использовать rand.Next(int.MinValue, int.MaxValue) без использования Math.Abs. Для любого неотрицательного целочисленного числа вы можете использовать перегрузку без каких-либо параметров.

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