logo

Cum se generează un număr aleatoriu în Java

În Java programare, ne-am cerut adesea genera numere aleatorii în timp ce dezvoltăm aplicații. Multe aplicații au caracteristica generează numere aleatoriu , cum ar fi pentru a verifica utilizatorul multe aplicații folosesc OTP . Cel mai bun exemplu de numere aleatoare sunt zarurile. Pentru că atunci când îl aruncăm, obținem un număr aleatoriu între 1 și 6.

În această secțiune, vom afla ce este a Număr aleatoriu și cum se generează numere aleatorii în Java .

Număr aleatoriu

Numerele aleatoare sunt numerele care folosesc un set mare de numere și selectează un număr folosind algoritmul matematic. Îndeplinește următoarele două condiții:

  • Valorile generate sunt distribuite uniform pe un interval definit.
  • Este imposibil să ghicim valoarea viitoare pe baza valorilor actuale și trecute.

Generarea unui număr aleatoriu în Java

În Java, există trei moduri de a genera numere aleatorii folosind metoda și clasele.

  • Folosind Aleatoriu() Metodă
  • Folosind Aleatoriu Clasă
  • Folosind ThreadLocalRandom Clasă
  • Folosind int() Metodă (în Java 8)

Folosind metoda Math.random().

Java Matematică clasa are multe metode pentru diferite operații matematice. Una dintre ele este Aleatoriu() metodă. Este un static metoda clasei de matematică. O putem invoca direct. Se generează doar dubla tastați un număr aleator mai mare sau egal cu 0,0 și mai puțin de 1,0 . Înainte de a folosi metoda random(), trebuie să importamjava.lang.Mathclasă.

Sintaxă:

 public static double random() 

Nu acceptă niciun parametru. Returnează un dublu pseudoaleator care este mai mare sau egal cu 0,0 și mai mic de 1,0.

Să creăm un program care generează numere aleatorii folosind metoda 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()); } } 

Ieșire:

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

Tine minte: De fiecare dată când executăm programul, obținem o ieșire diferită. Ieșirea dvs. poate diferi de rezultatul prezentat mai sus.

De asemenea, putem folosi următoarea formulă dacă dorim să generăm un număr aleator între un interval specificat.

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

În formula de mai sus, valoarea minimă este inclusivă, în timp ce valoarea maximă este exclusivă.

Să creăm un program care generează numere aleatorii între 200 și 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); } } 

Ieșire 1:

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

Ieșire 2:

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

Folosind clasa aleatorie

O altă modalitate de a genera un număr aleator este să utilizați Java Aleatoriu clasă aljava.utilpachet. Acesta generează un flux de numere pseudoaleatoare. Putem genera un număr aleatoriu de orice tip de date, cum ar fi integer, float, double, boolean, long. Dacă intenționați să utilizați această clasă pentru a genera numere aleatorii, urmați pașii de mai jos:

  • În primul rând, importați clasajava.lang.Random.
  • Creaza un obiect din clasa Random.
  • Invocați oricare dintre următoarele metode:
  • nextInt(int bound) nextInt() nextFloat() următorulDublu() următorulLung() nextBoolean()

Toate metodele de mai sus returnează următoarea valoare pseudoaleatoare, distribuită omogen (metoda corespunzătoare) din secvența acestui generator de numere aleatoare. The următorulDublu() și nextFloat() metoda generează o valoare aleatorie între 0,0 și 1,0.

The nextInt(int bound) metoda acceptă o limită de parametru (superioară) care trebuie să fie pozitivă. Acesta generează un număr aleatoriu în intervalul 0 până la bound-1.

converti str în int

Să creăm un program care generează numere aleatoare folosind clasa 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); } } 

Ieșire:

 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 

Folosind clasa ThreadLocalRandom

The ThreadLocalRandom clasa este definită înjava.util.concurrentpachet. Este inițializat cu un seed generat intern, la fel ca generatorul aleator al clasei Math. Nu poate fi modificat. Putem folosi această clasă în felul următor:

 ThreadLocalRandom.current().nextX(...) 

Unde X este Int, Long etc.

Notă: Este imposibil să partajați accidental un ThreadLocalRandom cu mai multe fire.

Putem genera un număr aleatoriu de orice tip de date, cum ar fi integer, float, double, boolean, long. Dacă intenționați să utilizați această clasă pentru a genera numere aleatorii, urmați pașii de mai jos:

  • Mai întâi, importați clasa utilizândjava.util.concurrent.ThreadLocalRandom.
  • Invocați metoda corespunzătoare pentru care doriți să generați numere aleatoriu.
  • nextInt() următorulDublu() următorulLung() nextFloat() nextBoolean()

Toate metodele de mai sus suprascriu metoda corespunzătoare a clasei Random și returnează valoarea corespunzătoare.

    nextInt(int bound) nextDouble (înt bound) nextLong (înt bound)

Metodele de mai sus analizează un parametru legat (sus) care trebuie să fie pozitiv . Returnează valoarea corespunzătoare generată aleatoriu între 0 (inclusiv) și limita specificată (exclusiv). Aruncă IllegalArgumentExcetion dacă limita este negativă.

    nextInt(int origin, int bound) nextDouble(int origin, int bound) nextLong(int origin, int bound)

Metodele de mai sus analizează doi parametri origine și legat . Originea specifică cea mai mică valoare returnat și bound-ul specifică limită superioară . Returnează valoarea corespunzătoare generată aleatoriu între originea specificată (inclusiv) și legată (exclusiv). De asemenea, aruncări IllegalArgumentExcetion dacă originea este mai mare sau egală cu bound.

Să creăm un program care să genereze numere aleatorii folosind Clasa 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); } } 

Ieșire 1:

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

Ieșire 2:

 Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true 

În mod similar, putem folosi și alte metode de ThreadLocalRandomclass .

Generarea numerelor aleatorii în Java 8

În Java 8, o nouă metodă ints() a fost adăugată la Clasa aleatorie . Trebuie să importamjava.util.Randomînainte de a utiliza metoda.

int():

Valorile int pseudoaleatoare au generat la fel ca apelarea metodei nextInt(). Returnează un flux nelimitat de valori int pseudoaleatoare.

ints(long streamSize):

Metoda parsează un parametru streamSize de tip lung. Specifică numărul de valori care trebuie generate. Valorile int pseudoaleatoare au generat la fel ca și apelarea metodei nextInt(). De asemenea, returnează un flux de valori int generate aleatoriu. Aruncă IllegalArgumentException dacă dimensiunea fluxului este mai mică decât zero.

sanjay dutt și

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

Parametri:

    streamSize:Numărul de valori de generat.randomNumberOrigin:Originea fiecărei valori aleatoriirandomNumberBound:Limitat pentru fiecare valoare aleatoare

Returnează un flux de valori int pseudoaleatoare cu originea și legată specificate. Aruncă IllegalArgumentException dacă:

  • stramSize<0< li>
  • origine > = legat
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametri:

randomNumberOrigin:Originea fiecărei valori aleatoriirandomNumberBound:Limitat pentru fiecare valoare aleatoare

Returnează un flux nelimitat de valori int pseudoaleatoare cu originea și legată specificate. Aruncă IllegalArgumentException dacă originea este mai mare sau egală cu bound.

În mod similar, putem genera și fluxul de tipuri lungi și duble folosind tanjeste() și se dubleaza() metoda, respectiv.

Să creăm un program care generează un flux de numere întregi folosind int() metoda clasei 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); } } 

Ieșire 1:

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

Ieșire 2:

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