1. Обзор
В этом уроке мы рассмотрим различные способы генерации случайных чисел в диапазоне.
2. Генерация случайных чисел в диапазоне
2.1. Math.random
Math.random
дает случайное двойное
значение, которое больше или равно 0,0 и меньше 1,0.
Давайте используем метод Math.random
для генерации случайного числа в заданном диапазоне [min, max)
:
public int getRandomNumber(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
Почему это работает? Давайте посмотрим, что происходит, когда Math.random
возвращает 0.0, что является наименьшим возможным результатом:
0.0 * (max - min) + min => min
Итак, наименьшее число, которое мы можем получить, это min
.
Так как 1.0 является исключительной верхней границей Math.random
, вот что мы получаем:
1.0 * (max - min) + min => max - min + min => max
Следовательно, исключительная верхняя граница возврата нашего метода равна max
.
В следующем разделе мы увидим, что тот же шаблон повторяется с Random#nextInt
.
2.2. java.util.Random.nextInt
Мы также можем использовать экземпляр java.util.Random
, чтобы сделать то же самое.
Давайте воспользуемся методом java.util.Random.nextInt
для получения случайного числа:
public int getRandomNumberUsingNextInt(int min, int max) {
Random random = new Random();
return random.nextInt(max - min) + min;
}
Параметр min
(начало координат) является инклюзивным, тогда как верхняя граница max
является исключающей.
2.3. java.util.Random.ints
Метод java.util.Random.ints
возвращает IntStream
случайных целых чисел.
Итак, мы можем использовать метод java.util.Random.ints
и возвращать случайное число:
public int getRandomNumberUsingInts(int min, int max) {
Random random = new Random();
return random.ints(min, max)
.findFirst()
.getAsInt();
}
Здесь также указанное минимальное
значение происхождения является включающим, а максимальное
— исключающим.
3. Заключение
В этой статье мы увидели альтернативные способы генерации случайных чисел в диапазоне.
Фрагменты кода, как всегда, можно найти на GitHub .