Генерация на случайни числа в Java

Генерирането на произволни числа в Java е често срещана задача. Например, може да искате да изпълнявате тестове с произволни стойности всеки път. В тази публикация разглеждаме различни начини, по които можем да генерираме произволни числа в Java.



Как да генерирам произволни числа в Java

В Java можем да генерираме произволни числа, като използваме java.util.Random клас.

След като импортираме класа Random, можем да създадем обект от него, който ни дава възможност да използваме произволни числа.


Например методи nextInt() и nextLong() ще върне число, което е в диапазона от стойности (отрицателни и положителни) съответно на типовете данни int и long.



Генериране на произволни Int, Long и Boolean

import java.util.Random; public class GenerateRandomNumbers {
static Random rand;
public static void main(String[] args) {
rand = new Random();
System.out.println('Random integer: ' + rand.nextInt());
System.out.println('Random long: ' + rand.nextLong());
System.out.println('Random boolean: ' + rand.nextBoolean());
} }


Генериране на случайни числа в диапазон

Понякога искаме случайни числа да се генерират от определен диапазон, напр. между 1 и 50.


За целта можем да предоставим цяло число параметър на nextInt() метод. Този параметър определя горната граница за диапазона.

Тук трябва да се отбележи нещо, че номерът на горната граница не е включен като едно от генерираните числа. Например, nextInt(5) генерира числа от 0 до 4 включително.

Ако и ние пожелаем 5 за да бъдем в списъка на случайните числа, трябва да използваме nextInt(5)+1

import java.util.Random; public class GenerateRandomNumbers {
static Random rand;
public static void main(String[] args) {
rand = new Random();
int randInt = rand.nextInt(5) + 1;
System.out.println('Random integer: ' + randInt);
} }


Генериране на сигурни случайни числа в Java

Класът Random генерира произволни числа по детерминиран начин. Алгоритъмът, който произвежда произволността, се основава на число, наречено семе. Ако номерът на семето е известен, тогава е възможно да се изчислят числата, които ще бъдат получени от алгоритъма.


Целта на SecureRandom Класът е да генерира криптографски силни случайни числа.

SecureRandom трябва да произвежда недетерминирана продукция. Следователно всеки семен материал се предава на SecureRandom обектът трябва да бъде непредсказуем.

По-долу е даден пример за използване на SecureRandom клас за генериране на произволни числа в Java

import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; public class GenerateRandomNumbers {
static SecureRandom secureRandomGenerator;
public static void main(String[] args) {


try {

secureRandomGenerator = SecureRandom.getInstance('SHA1PRNG', 'SUN');
}

catch (NoSuchAlgorithmException | NoSuchProviderException e) {
}

//Get random integer in range
int randInRange = secureRandomGenerator.nextInt(499);
System.out.println(randInRange);
} }

Горните примери илюстрират как да се генерират произволни числа в Java.


Справка: Сигурно генериране на произволни числа