Автор оригинала: Pankaj Kumar.
Сегодня мы рассмотрим, как сгенерировать случайное число в Java. Иногда нам нужно генерировать случайные числа в Java-программах. Например, игра в кости или для генерации случайного идентификатора ключа для шифрования и т. Д.
Генератор случайных чисел на Java
В Java существует множество способов генерации случайного числа.
- java.util.Класс Random может использоваться для создания случайных чисел. Он предоставляет несколько методов для генерации случайных целых чисел, длинных, двойных и т.д.
- Мы также можем использовать Math.random() для создания двойника. Этот метод внутренне использует случайный класс Java.
java.util.параллельный.Класс ThreadLocalRandom
следует использовать для генерации случайных чисел в многопоточной среде. Этот класс является частью пакета Java Concurrent и представлен в Java 1.7. Этот класс имеет методы, аналогичные классу Java Random.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-программе.