Java Случайный

Класс 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 есть два конструктора, которые приведены ниже:

  1. Random(): создает новый генератор случайных чисел
  2. Random(long seed): создает новый генератор случайных чисел с указанным начальным значением

Методы класса Java Random

Давайте рассмотрим некоторые методы класса Random в языке программирования Java.

  1. nextBoolean(): Этот метод возвращает следующее псевдослучайное логическое значение из последовательности генератора случайных чисел.
  2. nextDouble(): Этот метод возвращает следующее псевдослучайное значение типа double в диапазоне от 0.0 до 1.0.
  3. nextFloat(): Этот метод возвращает следующее псевдослучайное значение типа float в диапазоне от 0.0 до 1.0.
  4. nextInt(): Этот метод возвращает следующее целочисленное значение из последовательности генератора случайных чисел.
  5. 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