logo

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

в Java програмиране, често ни се налагаше генериране на произволни числа докато разработваме приложения. Много приложения имат функцията да генериране на произволни числа , като например за проверка на потребителя, който много приложения използват OTP . Най-добрият пример за произволни числа са зарове. Защото, когато го хвърлим, получаваме произволно число между 1 и 6.

В този раздел ще научим какво е a произволно число и как да генерирате произволни числа в Java .

Случайно число

Случайните числа са числата, които използват голям набор от числа и избират число с помощта на математическия алгоритъм. Той отговаря на следните две условия:

  • Генерираните стойности са равномерно разпределени в определен интервал.
  • Невъзможно е да се познае бъдещата стойност въз основа на текущи и минали стойности.

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

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

  • Използвайки случаен() Метод
  • Използвайки случаен Клас
  • Използвайки ThreadLocalRandom Клас
  • Използвайки ints() Метод (в Java 8)

Използване на метода Math.random().

Java математика има много методи за различни математически операции. Един от тях е случаен() метод. Това е статичен метод на класа Math. Можем да го извикаме директно. Той генерира само двойно въведете произволно число по-голямо или равно на 0,0 и по-малко от 1.0 . Преди да използваме метода random(), трябва да импортирамеjava.lang.Mathклас.

Синтаксис:

 public static double random() 

Не приема никакъв параметър. Връща псевдослучайно двойно, което е по-голямо или равно на 0,0 и по-малко от 1,0.

Нека създадем програма, която генерира произволни числа, използвайки метода random().

RandomNumberExample1.java

 import java.lang.Math; public class RandomNumberExample1 { public static void main(String args[]) { // Generating random numbers System.out.println('1st Random Number: ' + Math.random()); System.out.println('2nd Random Number: ' + Math.random()); System.out.println('3rd Random Number: ' + Math.random()); System.out.println('4th Random Number: ' + Math.random()); } } 

Изход:

 1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898 

Помня: Всеки път получаваме различен изход, когато изпълняваме програмата. Вашият резултат може да се различава от показания по-горе.

Можем също да използваме следната формула, ако искаме да генерираме произволно число между определен диапазон.

 Math.random() * (max - min + 1) + min 

В горната формула минималната стойност е включена, докато максималната стойност е изключителна.

как да стартирате скрипт в linux

Нека създадем програма, която генерира произволни числа между 200 и 400.

RandomNumberExample2.java

 public class RandomNumberExample2 { public static void main( String args[] ) { int min = 200; int max = 400; //Generate random double value from 200 to 400 System.out.println('Random value of type double between '+min+' to '+max+ ':'); double a = Math.random()*(max-min+1)+min; System.out.println(a); //Generate random int value from 200 to 400 System.out.println('Random value of type int between '+min+' to '+max+ ':'); int b = (int)(Math.random()*(max-min+1)+min); System.out.println(b); } } 

Резултат 1:

 Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329 

Резултат 2:

 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

Използване на случайния клас

Друг начин за генериране на произволно число е да използвате Java случаен клас отjava.utilпакет. Той генерира поток от псевдослучайни числа. Можем да генерираме произволно число от произволен тип данни, като цяло число, плаващо число, двойно, булево, дълго. Ако възнамерявате да използвате този клас за генериране на произволни числа, следвайте стъпките, дадени по-долу:

  • Първо импортирайте класаjava.lang.Random.
  • Създайте обект от класа Random.
  • Извикайте някой от следните методи:
  • nextInt (обвързан с int) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

Всички горепосочени методи връщат следващата псевдослучайна, хомогенно разпределена стойност (съответстващ метод) от последователността на този генератор на произволни числа. The nextDouble() и nextFloat() методът генерира произволна стойност между 0,0 и 1,0.

The nextInt (обвързан с int) методът приема граница на параметър (горна), която трябва да е положителна. Той генерира произволно число в диапазона от 0 до bound-1.

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

RandomNumberExample3.java

 import java.util.Random; public class RandomNumberExample3 { public static void main(String args[]) { // creating an object of Random class Random random = new Random(); // Generates random integers 0 to 49 int x = random.nextInt(50); // Generates random integers 0 to 999 int y = random.nextInt(1000); // Prints random integer values System.out.println('Randomly Generated Integers Values'); System.out.println(x); System.out.println(y); // Generates Random doubles values double a = random.nextDouble(); double b = random.nextDouble(); // Prints random double values System.out.println('Randomly Generated Double Values'); System.out.println(a); System.out.println(b); // Generates Random float values float f=random.nextFloat(); float i=random.nextFloat(); // Prints random float values System.out.println('Randomly Generated Float Values'); System.out.println(f); System.out.println(i); // Generates Random Long values long p = random.nextLong(); long q = random.nextLong(); // Prints random long values System.out.println('Randomly Generated Long Values'); System.out.println(p); System.out.println(q); // Generates Random boolean values boolean m=random.nextBoolean(); boolean n=random.nextBoolean(); // Prints random boolean values System.out.println('Randomly Generated Boolean Values'); System.out.println(m); System.out.println(n); } } 

Изход:

 Randomly Generated Integers Values 23 767 Randomly Generated Double Values 0.37823814494212016 0.998058172671956 Randomly Generated Float Values 0.87804186 0.93880254 Randomly Generated Long Values -4974823544291679198 3650240138416076693 Randomly Generated Boolean Values false true 

Използване на клас ThreadLocalRandom

The ThreadLocalRandom класът е дефиниран вjava.util.concurrentпакет. Инициализира се с вътрешно генерирано начално число, същото като произволния генератор на класа Math. Не може да се променя. Можем да използваме този клас по следния начин:

сравним низ
 ThreadLocalRandom.current().nextX(...) 

Където X е Int, Long и т.н.

Забележка: Невъзможно е случайно да се сподели ThreadLocalRandom с множество нишки.

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

  • Първо, импортирайте класа, като използватеjava.util.concurrent.ThreadLocalRandom.
  • Извикайте съответния метод, за който искате да генерирате произволно числа.
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

Всички горепосочени методи заместват съответния метод на класа Random и връщат съответната стойност.

    nextInt (обвързан с int) nextDouble (обвързан с int) nextLong (обвързан с int)

Горните методи анализират параметър обвързани (горен) това трябва да бъде положителен . Той връща съответната произволно генерирана стойност между 0 (включително) и посочената граница (изключително). Хвърля се IllegalArgumentExcetion ако границата е отрицателна.

    nextInt(int произход, int обвързан) nextDouble(int произход, int обвързан) nextLong(int произход, int обвързан)

Горните методи анализират два параметъра произход и обвързани . Произходът уточнява най-малка стойност се връща и границата указва Горна граница . Връща съответна произволно генерирана стойност между посочения произход (включително) и обвързана (изключително). Освен това, хвърля IllegalArgumentExcetion ако произходът е по-голям или равен на bound.

Нека създадем програма, която генерира произволни числа, използвайки Клас ThreadLocalRandom .

RandomNumberExample4.java

 import java.util.concurrent.ThreadLocalRandom; public class RandomNumberExample4 { public static void main(String args[]) { // Generate random integers between 0 to 999 int a = ThreadLocalRandom.current().nextInt(); int b = ThreadLocalRandom.current().nextInt(); // Print random integer values System.out.println('Randomly Generated Integer Values:'); System.out.println(a); System.out.println(b); // Generate Random double values double c = ThreadLocalRandom.current().nextDouble(); double d = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Randomly Generated Double Values:'); System.out.println(c); System.out.println(d); // Generate random boolean values boolean e = ThreadLocalRandom.current().nextBoolean(); boolean f = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Randomly Generated Boolean Values:'); System.out.println(e); System.out.println(f); } } 

Резултат 1:

 Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true 

Резултат 2:

превключвател на машинопис
 Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true 

По същия начин можем да използваме и други методи за ThreadLocalRandomclass .

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

В Java 8 е добавен нов метод ints() към Произволен клас . Трябва да внесемjava.util.Randomпреди да използвате метода.

ints():

Псевдослучайните стойности на int генерираха същото като извикването на метода nextInt(). Той връща неограничен поток от псевдослучайни int стойности.

ints(long streamSize):

Методът анализира параметър streamSize от тип дълъг. Той определя броя на стойностите, които трябва да бъдат генерирани. Псевдослучайните стойности на int генерираха същото като извикването на метода nextInt(). Той също така връща поток от произволно генерирани int стойности. Хвърля се IllegalArgumentException ако размерът на потока е по-малък от нула.

ints(long streamSize, int randomNumberOrigin, int randomNumberBound):

Параметри:

    streamSize:Брой стойности за генериране.randomNumberOrigin:Произход на всяка произволна стойностrandomNumberBound:Ограничение на всяка произволна стойност

Той връща поток от псевдослучайни int стойности с посочения произход и граница. Хвърля се IllegalArgumentException ако:

  • stramSize<0< li>
  • произход > = обвързан
 ints(int randomNumberOrigin, int randomNumberBound): 

Параметри:

randomNumberOrigin:Произход на всяка произволна стойностrandomNumberBound:Ограничение на всяка произволна стойност

Той връща неограничен поток от псевдослучайни int стойности с посочения произход и граница. Хвърля се IllegalArgumentException ако произходът е по-голям или равен на bound.

По подобен начин можем също да генерираме поток от дълги и двойни типове, като използваме дълго () и двойни() метод, съответно.

Нека създадем програма, която генерира поток от цели числа, използвайки ints() метод на класа Random.

RandomNumberExample5.java

 import java.util.Random; public class RandomNumberExample5 { public static void main(String[] args) { randomInts(5); randomInts(9, 50, 90); //getStreamOfRandomInts(30, 50); } //method that generates a stream of integers having size 5 public static void randomInts(int num) { Random random = new Random(); random.ints(num).forEach(System.out::println); } //method that generates a stream of 9 integers between 50 to 90 public static void randomInts(int num, int origin, int bound) { Random random1 = new Random(); random1.ints(num, origin, bound).forEach(System.out::println); } } 

Резултат 1:

 727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85 

Резултат 2:

 -1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76