Как сгенерировать случайное число
Короткий ответ
nextInt(from, to) возвращает случайное целое от from включительно до to не включительно:
void main() {
var random = new Random();
int dice = random.nextInt(1, 7);
IO.println(dice);
}Результат:
1Здесь выпадает число от 1 до 6, и каждый запуск даёт новое значение.
Дробное число
nextDouble() возвращает число от 0 до 1, а вариант с двумя аргументами — из нужного диапазона:
void main() {
var random = new Random();
IO.println(random.nextDouble());
IO.println(random.nextDouble(10.0, 20.0));
}Результат:
0.7441592756923616
16.647522933450976Повторяемая последовательность
Если передать в Random начальное число (seed), последовательность будет одинаковой при каждом запуске. Это удобно в тестах:
void main() {
var random = new Random(42);
for (int i = 0; i < 5; i++) {
IO.print(random.nextInt(100) + " ");
}
IO.println();
}Результат:
30 63 48 84 70Много чисел сразу
ints() возвращает поток случайных чисел:
void main() {
List<Integer> numbers = new Random(7).ints(5, 1, 50).boxed().toList();
IO.println(numbers);
}Результат:
[46, 41, 40, 45, 20]Частая ошибка
Создавать новый Random в цикле или забывать, что верхняя граница не включается. nextInt(6) никогда не вернёт 6 — только числа от 0 до 5. Для паролей и токенов используйте SecureRandom, а в многопоточном коде — ThreadLocalRandom.current().
Функции из этого ответа
- Random — Генератор случайных чисел: целые в диапазоне, дробные, boolean.
- ThreadLocalRandom — Готовый генератор случайных чисел, который не нужно создавать; быстрый и в многопоточном коде.
- Math.random() — Возвращает случайное дробное число от 0 (включительно) до 1 (не включительно).