Обратите внимание, что этот подход является более предвзятым и менее эффективным, чем 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))