Генерация случайных чисел в Java: Практическое руководство с Random и Math.random
В этом кратком уроке вы узнаете, как генерировать случайные значения в Java, используя два наиболее распространенных подхода: java.util.Random и Math.random(). Оба являются частью JDK, но каждый служит немного разным случаям использования и предлагает уникальные функции.
- java.util.Random — Генерирует числа любого примитивного типа и может быть инициализирован (seeded) для воспроизводимости.
- Math.random() — Предоставляет быстрый способ получить double в диапазоне [0.0, 1.0) без создания объекта.
Генерация случайных чисел с java.util.Random
Класс Random может производить значения int, long, float, double и boolean. Создайте его один раз и повторно используйте тот же объект, чтобы избежать накладных расходов на производительность.
Ниже приведен полный пример, выводящий десять случайных целых чисел от 0 до 99 (включительно). Если вам нужна верхняя граница включительно, добавьте единицу к аргументу.
import java.util.Random;
public class RandomNumbers {
public static void main(String[] args) {
Random rng = new Random();
for (int i = 0; i < 10; i++) {
int randomNumber = rng.nextInt(100); // 0-99
System.out.println("Random No: " + randomNumber);
}
}
}
Типичный вывод:
Random No: 17 Random No: 57 Random No: 73 Random No: 48 Random No: 68 Random No: 86 Random No: 34 Random No: 97 Random No: 73 Random No: 18
Поскольку Random потокобезопасен для большинства использований, вы можете делить один экземпляр между несколькими потоками при необходимости. Для воспроизводимых последовательностей передайте seed: new Random(42).
Генерация случайных чисел с Math.random()
Когда вам нужен только быстрый double в диапазоне [0.0, 1.0), Math.random() удобен. Он внутренне делегирует одному экземпляру Random, поэтому он эффективен для небольших нагрузок.
Пример: генерация десяти значений double.
public class DemoRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
}
}
Типичный вывод:
0.46518450373334297 0.14859851177803485 0.5628391820492477 0.6323378498048606 0.1740198445692248 0.9140544122258946 0.9167350036262347 0.49251219841030147 0.7426056725722353
Для генерации целых чисел или double в другом диапазоне комбинируйте Math.random() с арифметикой. Например, чтобы получить случайное int от 1 до 10 включительно: (int)(Math.random() * 10) + 1.
Ключевые выводы
- Используйте
java.util.Random, когда вам нужны различные примитивные типы или детерминированные последовательности через seeding. - Используйте
Math.random()для быстрых, разовых double в интервале [0.0, 1.0). - Всегда повторно используйте один и тот же экземпляр
Random, чтобы избежать накладных расходов на повторное seeding. - Для потокобезопасной, высокопроизводительной случайности в конкурентных средах рассмотрите
ThreadLocalRandom(Java 7+).
java
- Развертывание Java EE приложений на Microsoft Azure: пошаговое руководство
- Интерфейс List в Java: обзор, реализации и ключевые методы
- Освоение алгоритмов Java Collections: сортировка, перемешивание и многое другое
- Создание массива объектов в Java: пошаговое руководство
- Метод String.length() в Java: как получить длину строки (пример)
- Освоение String.compareTo() в Java: синтаксис, сценарии использования и примеры
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
- Конвертация char в String в Java — практические примеры и лучшие практики
- Реверс строки в Java с использованием рекурсии — пошаговое руководство
- Java 8 Streams: декларативная обработка данных