Поиск по сайту:

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


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

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

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

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

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

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

Random random = new Random();

int rand = random.nextInt();

Да, так просто сгенерировать случайное целое число в java. Когда мы создаем экземпляр Random, он генерирует длинное начальное значение, которое используется во всех вызовах метода 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() или класса 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 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 random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

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

9. Пример SecureRandom

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

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

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

Вы можете загрузить пример кода из нашего репозитория GitHub.