Генератор случайных чисел в 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
. Мы можем установить это начальное значение в программе, однако в большинстве случаев это не требуется.
//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.