0Pricing
Java Academy · Урок

Генерация случайных чисел

Random и ThreadLocalRandom

«Генерация случайных чисел» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Генерация случайных чисел

Случайность используется в играх, моделировании и выборке. Java предоставляет Math.random(), класс Random и ThreadLocalRandom для многопоточного кода.

Основы Math.random

Math.random() возвращает значение типа double в диапазоне [0.0, 1.0): ноль включается, единица — нет.

public class Main {
    public static void main(String[] args) {
        double r = Math.random();
        System.out.println("Value between 0 and 1: " + r);
    }
}

Масштабирование Math.random

Чтобы получить диапазон целых чисел, умножьте результат и выполните приведение типа. Выражение (int)(Math.random() * 6) даёт значения от 0 до 5.

public class Main {
    public static void main(String[] args) {
        int roll = (int)(Math.random() * 6) + 1;
        System.out.println("Dice: " + roll);
    }
}

Класс Random

Класс java.util.Random более гибок. Создайте экземпляр, а затем вызывайте такие методы, как nextInt, nextDouble и nextBoolean.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        System.out.println(rng.nextBoolean());
        System.out.println(rng.nextDouble());
    }
}

nextInt с верхней границей

nextInt(bound) возвращает int от 0 включительно до bound исключительно. Вызов nextInt(6) даёт значения от 0 до 5.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int value = rng.nextInt(100);
        System.out.println("0 to 99: " + value);
    }
}

Начальное значение для воспроизводимости

Передача начального значения конструктору делает последовательность детерминированной: одно и то же начальное значение всегда порождает одни и те же числа. Это чрезвычайно полезно при тестировании.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random(42);
        System.out.println(rng.nextInt(1000));
        System.out.println(rng.nextInt(1000));
    }
}

Одинаковое начальное значение — одинаковая последовательность

Два объекта Random, созданные с одинаковым начальным значением, выдают идентичные последовательности. Это полезно, когда ошибку нужно воспроизвести в точности.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random a = new Random(7);
        Random b = new Random(7);
        System.out.println(a.nextInt(50) == b.nextInt(50));
    }
}

ThreadLocalRandom

В многопоточных программах один общий объект Random становится узким местом. ThreadLocalRandom.current() предоставляет каждому потоку собственный генератор без конкуренции за общий ресурс.

import java.util.concurrent.ThreadLocalRandom;

public class Main {
    public static void main(String[] args) {
        int value = ThreadLocalRandom.current().nextInt(1, 7);
        System.out.println("Dice: " + value);
    }
}

Не используйте один Random в разных потоках

Не передавайте один экземпляр Random множеству потоков: это может привести к неравномерному распределению и конкуренции за общий ресурс. В многопоточном коде предпочтителен ThreadLocalRandom.

Вещественные числа и распределение Гаусса

nextDouble() возвращает значение из диапазона [0,1), а nextGaussian() — значение из нормального распределения со средним 0 и стандартным отклонением 1.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random(1);
        System.out.println(rng.nextDouble());
        System.out.println(rng.nextGaussian());
    }
}

Выбор подходящего средства

Используйте Math.random() для быстрого получения числа двойной точности, Random, когда нужны границы или начальное значение, и ThreadLocalRandom в многопоточном коде. Для случайных значений, связанных с безопасностью, вместо этого используйте SecureRandom.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли работу со случайностью.

Повторение

Вы научились генерировать случайные числа.

  • Math.random() возвращает число двойной точности из диапазона [0,1).
  • Random.nextInt(bound) возвращает значения от 0 до bound-1.
  • Начальное значение делает последовательности воспроизводимыми.
  • ThreadLocalRandom — безопасный выбор для многопоточного кода.

Часто задаваемые вопросы

Урок «Генерация случайных чисел» бесплатный?

Да — полный текст урока «Генерация случайных чисел» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Генерация случайных чисел»?

Random и ThreadLocalRandom Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Генерация случайных чисел»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Класс Math
  2. Генерация случайных чисел
  3. Случайные диапазоны и перемешивание
  4. Округление и ограничения в Math
← Назад к Java Academy