Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сгенерировать случайное число

Короткий ответ

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 (не включительно).

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.