Класс Java Random используется для генерации серии случайных чисел.
Класс Java Random
Random
является частью пакета java.util.- Экземпляр класса java Random используется для генерации случайных чисел.
- Этот класс предоставляет несколько методов для генерации случайных чисел различных типов: целых, с плавающей запятой, длинных и т. д.
- Алгоритм генерации случайных чисел работает на основе начального значения (seed). Если не предоставлено начальное значение, оно создается на основе системного времени в наносекундах.
- Если два экземпляра Random имеют одинаковое начальное значение, то они будут генерировать одинаковую последовательность случайных чисел.
- Класс Java Random является потокобезопасным, однако в многопоточной среде рекомендуется использовать класс
java.util.concurrent.ThreadLocalRandom
. - Экземпляры класса Random не подходят для приложений, требующих повышенной безопасности; в таких случаях лучше использовать
java.security.SecureRandom
.
Конструкторы класса Java Random
У класса Java Random есть два конструктора, которые приведены ниже:
Random()
: создает новый генератор случайных чиселRandom(long seed)
: создает новый генератор случайных чисел с указанным начальным значением
Методы класса Java Random
Давайте рассмотрим некоторые методы класса Random в языке программирования Java.
nextBoolean()
: Этот метод возвращает следующее псевдослучайное логическое значение из последовательности генератора случайных чисел.nextDouble()
: Этот метод возвращает следующее псевдослучайное значение типа double в диапазоне от 0.0 до 1.0.nextFloat()
: Этот метод возвращает следующее псевдослучайное значение типа float в диапазоне от 0.0 до 1.0.nextInt()
: Этот метод возвращает следующее целочисленное значение из последовательности генератора случайных чисел.- nextInt(int n): Этот метод возвращает псевдослучайное целочисленное значение в диапазоне от 0 до указанного значения из последовательности генератора случайных чисел.
Пример использования класса Java Random
Давайте рассмотрим пример программы на Java с использованием класса Random.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Example Program
*
*/
public class RandomNumberExample {
public static void main(String[] args) {
//инициализация генератора случайных чисел
Random random = new Random();
//генерация логического значения
System.out.println(random.nextBoolean());
//генерация значения типа double
System.out.println(random.nextDouble());
//генерация значения типа float
System.out.println(random.nextFloat());
//генерация целочисленного значения
System.out.println(random.nextInt());
//генерация целочисленного значения within specific limit
System.out.println(random.nextInt(20));
}
}
Вывод программы выше:
false
0.30986869120562854
0.6210066
-1348425743
18
Проверьте этот пост для получения более подробной информации о Генерации случайных чисел в Java.
Генерация случайных чисел с использованием зерна
Существует два способа генерации случайных чисел с использованием зерна.
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
Зерно – это начальное значение внутреннего состояния генератора псевдослучайных чисел, которое поддерживается методом next(int).
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author pankaj
*
*/
public class RadomSeedExample {
public static void main(String[] args) {
//используя конструктор
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//используя метод
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
Вывод программы выше:
Using Constructor
-1193959466
Using Method
-1133938638
Что произойдет, если мы передадим одно и то же зерно двум различным генераторам случайных чисел? Давайте посмотрим на программу ниже и посмотрим, что произойдет, если мы передадим одно и то же зерно двум различным генераторам случайных чисел.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Same Seed Example Program
*
*/
public class RandomNumberSameSeedExample {
public static void main(String[] args) {
//инициализация двух генераторов случайных чисел с одинаковым зерном
Random random1 = new Random(100);
Random random2 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
Вывод программы выше:
-1193959466
-1193959466
Мы видим, что он сгенерирует одно и то же случайное число, если мы передадим одно и то же зерно двум различным генераторам случайных чисел.
Методы класса Java 8 Random
Как вы можете видеть на изображении выше, в Java 8 было добавлено много новых методов в класс Random. Эти методы могут генерировать поток случайных чисел. Ниже приведена простая программа для создания потока из 5 целых чисел от 1 до 100.
package com.journaldev.random;
import java.util.Random;
import java.util.stream.IntStream;
public class JavaRandomExample {
public static void main(String[] args) {
Random random = new Random();
// генерация потока из 5 целых чисел от 1 до 100
IntStream ints = random.ints(5, 1, 100);
ints.forEach(System.out::println);
}
}
Это все для быстрого обзора класса Java Random. Ссылка: API Doc
Source:
https://www.digitalocean.com/community/tutorials/java-random