Обратите внимание, что этот подход является более предвзятым и менее эффективным, чем nextInt
подход, https://stackoverflow.com/a/738651/360211
Один стандартный шаблон для достижения этой цели:
Min + (int)(Math.random() * ((Max - Min) + 1))
Функция библиотеки Java Math Math.random () генерирует двойное значение в диапазоне [0,1)
. Обратите внимание, что этот диапазон не включает 1.
Чтобы сначала получить определенный диапазон значений, необходимо умножить его на величину диапазона значений, который вы хотите охватить.
Math.random() * ( Max - Min )
Это возвращает значение в диапазоне [0,Max-Min)
, где «Макс-Мин» не включен.
Например, если вы хотите [5,10)
, вам нужно охватить пять целочисленных значений, чтобы вы использовали
Math.random() * 5
Это вернет значение в диапазоне [0,5)
, где 5 не включено.
Теперь вам нужно сместить этот диапазон до диапазона, на который вы нацеливаетесь. Вы делаете это, добавляя значение Min.
Min + (Math.random() * (Max - Min))
Теперь вы получите значение в диапазоне [Min,Max)
. Следуя нашему примеру, это означает [5,10)
:
5 + (Math.random() * (10 - 5))
Но это все еще не включает, Max
и вы получаете двойное значение. Чтобы получить Max
включенное значение, вам нужно добавить 1 к параметру диапазона, (Max - Min)
а затем обрезать десятичную часть путем приведения к типу int. Это достигается с помощью:
Min + (int)(Math.random() * ((Max - Min) + 1))
И там у вас есть это. Случайное целочисленное значение в диапазоне [Min,Max]
или согласно примеру [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))