Сегодня мы рассмотрим, как сгенерировать случайное число на Java. Иногда нам нужно генерировать случайные числа в программах на Java. Например, в игре в кости или для создания случайного идентификатора ключа для шифрования и т. д.
Генератор случайных чисел на Java
Существует много способов генерации случайного числа на Java.
- Класс java.util.Random может быть использован для создания случайных чисел. Он предоставляет несколько методов для генерации случайных целых, длинных, вещественных чисел и т. д.
- Также можно использовать Math.random() для генерации вещественного числа. Этот метод внутренне использует класс Java Random.
Класс java.util.concurrent.ThreadLocalRandom
следует использовать для генерации случайного числа в многопоточной среде. Этот класс является частью пакета Java Concurrent и был введен в Java 1.7. В этом классе есть методы, аналогичные классу Java Random.Класс java.security.SecureRandom
можно использовать для генерации случайного числа с высокой степенью безопасности. Этот класс предоставляет криптографически надежный генератор случайных чисел. Однако он медленный в обработке. Поэтому, в зависимости от требований вашего приложения, вы должны решить, использовать его или нет.
Генератор случайных чисел Java
Давайте рассмотрим несколько примеров генерации случайного числа в Java. Позже мы также рассмотрим пример программы с использованием ThreadLocalRandom и SecureRandom.
1. Генерация случайного целого числа
Random random = new Random();
int rand = random.nextInt();
Да, это настолько просто генерировать случайное целое число в Java. Когда мы создаем экземпляр Random, он генерирует длинное начальное значение, которое используется во всех вызовах методов nextXXX
. Мы можем установить это начальное значение в программе, однако это не требуется в большинстве случаев.
// установить длинное начальное значение, используя конструктор Random
Random random = new Random(123456789);
// установить длинное начальное значение с использованием метода установки
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
класса Random для генерации случайного числа с плавающей запятой в 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, это вызовет UnsupportedOperationException
. Класс ThreadLocalRandom также имеет несколько дополнительных утилитарных методов для генерации случайного числа в пределах заданного диапазона. Например, чтобы сгенерировать случайное число от 1 до 10, мы можем сделать это следующим образом.
ThreadLocalRandom random = ThreadLocalRandom.current();
int rand = random.nextInt(1, 11);
У ThreadLocalRandom есть аналогичные методы для генерации случайных значений типа long и double.
9. Пример использования SecureRandom
Вы можете использовать класс SecureRandom для генерации более безопасных случайных чисел с использованием любого из перечисленных провайдеров. Ниже приведен пример кода SecureRandom.
Random random = new SecureRandom();
int rand = random.nextInt();
System.out.println(rand);
Это все о генерации случайного числа в программе на Java.
Вы можете скачать пример кода из нашего репозитория на GitHub.
Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java