Генерация случайного числа в Java


Для генерации целого случайного числа в заданном диапазоне от Min до Max, обычно используется следующий паттерн:

Min + (int)(Math.random() * ((Max - Min) + 1))

В Java метод Math.random() генерирует число типа double в диапазоне [0,1). Обратите внимание, что 1 не входит в этот диапазон!
Чтобы получить определенный диапазон значений, сначала нужно умножить на разницу между максимумом и минимумом

Math.random() * ( Max - Min )

Это вернет нам значение в диапазоне [0,Max-Min].
К примеру, если мы хотим получить целые значения [5,10], нам нужно покрыть диапазон в 5 целых(int) значений. То есть:

Math.random() * 5

Данный пример будет генерировать значения в диапазоне [0,5).
Теперь нам нужно сдвинуть этот диапазон, чтобы минимальное значение соответствовало желаемому. Для этого мы просто добавляем значение минимума

Min + (Math.random() * (Max - Min))

Теперь мы получим значение в диапазоне [Min,Max). Продолжая наш пример, это будет [5,10):

5 + (Math.random() * (10 - 5))

Но этот вариант все равно не включает значение Max, и вообще, мы получаем значение типа double. Для того чтобы значение Max тоже входило в допустимый диапазон, нужно прибавить 1 к нашему параметру диапазона (Max - Min) и затем избавиться от дробной части приведением значения к int. Вот так:

Min + (int)(Math.random() * ((Max - Min) + 1))

Теперь то что надо! Случайное целое значение в диапазоне [Min,Max], или как в нашем случае [5,10]:

int rnd = 5 + (int)(Math.random() * ((10 - 5) + 1))

Комментариев нет:

Отправить комментарий