Для генерации целого случайного числа в заданном диапазоне от 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))
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))
Комментариев нет:
Отправить комментарий