Рубрики
Без рубрики

Генератор случайных чисел на Java

Как сгенерировать случайное число на Java. Генератор случайных чисел Java-программа, использующая случайный класс, примеры ThreadLocalRandom и SecureRandom, random int.

Автор оригинала: Pankaj Kumar.

Сегодня мы рассмотрим, как сгенерировать случайное число в Java. Иногда нам нужно генерировать случайные числа в Java-программах. Например, игра в кости или для генерации случайного идентификатора ключа для шифрования и т. Д.

Генератор случайных чисел на Java

В Java существует множество способов генерации случайного числа.

  1. java.util.Класс Random может использоваться для создания случайных чисел. Он предоставляет несколько методов для генерации случайных целых чисел, длинных, двойных и т.д.
  2. Мы также можем использовать Math.random() для создания двойника. Этот метод внутренне использует случайный класс Java.
  3. java.util.параллельный.Класс ThreadLocalRandom следует использовать для генерации случайных чисел в многопоточной среде. Этот класс является частью пакета Java Concurrent и представлен в Java 1.7. Этот класс имеет методы, аналогичные классу Java Random.
  4. java.безопасность.SecureRandom может использоваться для генерации случайных чисел с надежной защитой. Этот класс обеспечивает криптографически надежный генератор случайных чисел. Однако он медленно обрабатывается. Поэтому, в зависимости от требований вашего приложения, вы должны решить, использовать его или нет.

Генератор случайных чисел Java

Давайте рассмотрим несколько примеров генерации случайного числа в Java. Позже мы также рассмотрим пример программы ThreadLocalRandom и SecureRandom.

1. Сгенерируйте Случайное целое число

Random random = new Random();

int rand = random.nextInt();

Да, сгенерировать случайное целое число в java так просто. Когда мы создаем случайный экземпляр, он генерирует длинное начальное значение, которое используется во всех вызовах метода nextXXX . Мы можем установить это начальное значение в программе, однако в большинстве случаев это не требуется.

//set the long seed value using Random constructor
Random random = new Random(123456789);

//set long seed value using setter method
Random random1 = new Random();
random1.setSeed(1234567890);

2. Случайное число Java от 1 до 10

Иногда нам приходится генерировать случайное число между диапазонами. Например, в игре в кости возможные значения могут быть только от 1 до 6. Ниже приведен код, показывающий, как сгенерировать случайное число от 1 до 10 включительно.

Random random = new Random();
int rand = 0;
while (true){
    rand = random.nextInt(11);
    if(rand !=0) break;
}
System.out.println(rand);

Аргумент в nextInt(int x) исключен, поэтому мы должны указать аргумент как 11. Кроме того, 0 включено в сгенерированное случайное число, поэтому мы должны продолжать вызывать метод nextInt, пока не получим значение от 1 до 10. Вы можете расширить приведенный выше код для генерации случайного числа в любом заданном диапазоне.

3. Сгенерируйте Случайный двойной

Мы можем использовать Math.random() или случайный класс nextDouble метод для генерации случайного двойного числа в java.

Random random = new Random();

double d = random.nextDouble();

double d1 = Math.random();

4. Генерируйте Случайный поплавок

Random random = new Random();

float f = random.nextFloat();

5. Генерируйте Случайные длинные

Random random = new Random();

long l = random.nextLong();

6. Сгенерируйте Случайное логическое

Random random = new Random();

boolean flag = random.nextBoolean();

7. Сгенерируйте случайный массив байтов

Мы можем генерировать случайные байты и помещать их в предоставленный пользователем массив байтов, используя случайный класс. Количество произведенных случайных байтов равно длине массива байтов.

Random random = new Random();

byte[] randomByteArray = new byte[5];

random.nextBytes(randomByteArray);

System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]

8. ThreadLocalRandom в многопоточной среде

Вот простой пример, показывающий использование ThreadLocalRandom в многопоточной среде.

package com.journaldev.randomnumber;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

	public static void main(String[] args) {
		Runnable runnable = new MyRunnable();

		for (int i = 0; i < 5; i++) {
			Thread t = new Thread(runnable);
			t.setName("MyRunnable-Thread-" + i);
			t.start();
		}
	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		String threadName = Thread.currentThread().getName();
		System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
	}

}

Ниже приведен пример вывода моего выполнения вышеуказанной программы.

MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276

Мы не можем установить начальное значение для экземпляра ThreadLocalRandom, это вызовет исключение UnsupportedOperationException .

Класс ThreadLocalRandom также имеет некоторые дополнительные служебные методы для генерации случайного числа в пределах диапазона. Например, чтобы сгенерировать случайное число от 1 до 10, мы можем сделать это, как показано ниже.

ThreadLocalRandom random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

ThreadLocalRandom использует аналогичные методы для генерации случайных длинных и двойных значений.

9. Пример безопасности

Вы можете использовать класс SecureRandom для генерации более безопасных случайных чисел с помощью любого из перечисленных поставщиков. Ниже приведен краткий пример кода безопасности.

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

Это все о генерации случайного числа в Java-программе.