logo

Kako generirati slučajni broj u Javi

U Java programiranja, često smo tražili generirati slučajne brojeve dok razvijamo aplikacije. Mnoge aplikacije imaju značajku da generirati brojeve nasumično , poput provjere korisnika koje mnoge aplikacije koriste OTP . Najbolji primjer nasumičnih brojeva su kockice. Jer kada ga bacimo, dobivamo slučajni broj između 1 i 6.

U ovom odjeljku naučit ćemo što je a slučajni broj i kako generirati slučajne brojeve Java .

Slučajni broj

Nasumični brojevi su brojevi koji koriste veliki skup brojeva i odabiru broj pomoću matematičkog algoritma. Zadovoljava sljedeća dva uvjeta:

  • Generirane vrijednosti ravnomjerno raspoređene u određenom intervalu.
  • Nemoguće je pogoditi buduću vrijednost na temelju sadašnjih i prošlih vrijednosti.

Generiranje nasumičnog broja u Javi

U Javi postoji trosmjerno generiranje nasumičnih brojeva pomoću metode i klasa.

  • Koristiti nasumično() metoda
  • Koristiti slučajan Klasa
  • Koristiti ThreadLocalRandom Klasa
  • Koristiti ints() Metoda (u Javi 8)

Korištenje metode Math.random().

Java matematika klasa ima mnogo metoda za različite matematičke operacije. Jedan od njih je nasumično() metoda. To je statički metoda razreda matematike. Možemo ga izravno pozvati. Generira samo dvostruko upišite slučajni broj veći ili jednak 0,0 i manje od 1,0 . Prije korištenja metode random(), moramo uvestijava.lang.Mathrazreda.

Sintaksa:

 public static double random() 

Ne prihvaća nijedan parametar. Vraća pseudoslučajni double koji je veći ili jednak 0,0 i manji od 1,0.

Kreirajmo program koji generira slučajne brojeve pomoću metode random().

SlučajniBrojPrimjer1.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()); } } 

Izlaz:

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

Zapamtiti: Svaki put kad izvršimo program dobijemo drugačiji izlaz. Vaš rezultat može se razlikovati od rezultata prikazanog iznad.

Također možemo koristiti sljedeću formulu ako želimo generirati slučajni broj između određenog raspona.

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

U gornjoj formuli, minimalna vrijednost je uključena dok je maksimalna vrijednost isključiva.

Kreirajmo program koji generira nasumične brojeve između 200 i 400.

SlučajniBrojPrimjer2.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); } } 

Izlaz 1:

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

Izlaz 2:

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

Korištenje nasumične klase

Drugi način za generiranje slučajnog broja je korištenje Java slučajan razreda odjava.utilpaket. Generira tok pseudoslučajnih brojeva. Možemo generirati nasumični broj bilo koje vrste podataka, kao što su integer, float, double, Boolean, long. Ako ćete koristiti ovu klasu za generiranje nasumičnih brojeva, slijedite dolje navedene korake:

  • Prvo uvezite klasujava.lang.Random.
  • Stvorite objekt klase Random.
  • Pozovite bilo koju od sljedećih metoda:
  • nextInt(int vezano) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

Sve gore navedene metode vraćaju sljedeću pseudoslučajnu, homogeno distribuiranu vrijednost (odgovarajuća metoda) iz ovog niza generatora slučajnih brojeva. The nextDouble() i nextFloat() metoda generira slučajnu vrijednost između 0,0 i 1,0.

The nextInt(int vezano) metoda prihvaća granicu parametra (gornju) koja mora biti pozitivna. Generira nasumični broj u rasponu od 0 do bound-1.

Kreirajmo program koji generira slučajne brojeve pomoću klase Random.

SlučajniBrojPrimjer3.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); } } 

Izlaz:

 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 

Korištenje klase ThreadLocalRandom

The ThreadLocalRandom klasa je definirana ujava.util.concurrentpaket. Inicijalizira se s interno generiranim početnim elementom, istim kao i slučajni generator klase Math. Ne može se mijenjati. Ovu klasu možemo koristiti na sljedeći način:

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

Gdje je X Int, Long, itd.

Napomena: nemoguće je slučajno podijeliti ThreadLocalRandom s više niti.

Možemo generirati nasumični broj bilo koje vrste podataka, kao što su integer, float, double, Boolean, long. Ako ćete koristiti ovu klasu za generiranje nasumičnih brojeva, slijedite dolje navedene korake:

  • Prvo uvezite klasu koristećijava.util.concurrent.ThreadLocalRandom.
  • Pozovite odgovarajuću metodu za koju želite nasumično generirati brojeve.
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

Sve gore navedene metode nadjačavaju odgovarajuću metodu klase Random i vraćaju odgovarajuću vrijednost.

    nextInt(int vezano) nextDouble (int bound) nextLong (int bound)

Gore navedene metode analiziraju parametar vezan (gornji) to mora biti pozitivan . Vraća odgovarajuću nasumično generiranu vrijednost između 0 (uključivo) i navedene granice (isključivo). Baca se IllegalArgumentExcetion ako je granica negativna.

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

Gornje metode analiziraju dva parametra podrijetlo i vezan . Podrijetlo određuje najmanja vrijednost vraćeno, a veza specificira Gornja granica . Vraća odgovarajuću nasumično generiranu vrijednost između navedenog ishodišta (uključujući) i vezanog (isključivo). Također, bacanja IllegalArgumentExcetion ako je ishodište veće ili jednako vezanom.

Kreirajmo program koji generira nasumične brojeve pomoću ThreadLocalRandom klasa .

SlučajniBrojPrimjer4.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); } } 

Izlaz 1:

razlika između lava i tigra
 Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true 

Izlaz 2:

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

Slično, možemo koristiti i druge metode ThreadLocalRandomclass .

Generiranje nasumičnog broja u Javi 8

U Javi 8, nova metoda ints() je dodana u Slučajni razred . Moramo uvestijava.util.Randomprije korištenja metode.

ints():

Pseudoslučajne int vrijednosti generirane su isto kao i pozivanje metode nextInt(). Vraća neograničen tok pseudoslučajnih int vrijednosti.

ints(long streamSize):

Metoda analizira parametar streamSize tipa long. Određuje broj vrijednosti koje treba generirati. Pseudoslučajne int vrijednosti generirane su isto kao i pozivanje metode nextInt(). Također vraća tok nasumično generiranih int vrijednosti. Baca se IllegalArgumentException ako je veličina toka manja od nule.

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

Parametri:

    Veličina toka:Broj vrijednosti za generiranje.SlučajniBrojPorijeklo:Podrijetlo svake slučajne vrijednostirandomNumberBound:Ograničenje svake slučajne vrijednosti

Vraća tok pseudoslučajnih int vrijednosti s navedenim ishodištem i ograničenjem. Baca se IllegalArgumentException ako:

  • stramSize<0< li>
  • podrijetlo > = vezano
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametri:

SlučajniBrojPorijeklo:Podrijetlo svake slučajne vrijednostirandomNumberBound:Ograničenje svake slučajne vrijednosti

Vraća neograničen tok pseudoslučajnih int vrijednosti s navedenim izvorom i ograničenjem. Baca se IllegalArgumentException ako je ishodište veće ili jednako vezanom.

Slično, također možemo generirati tok dugih i dvostrukih tipova korištenjem duguje() i duplo () metoda, odnosno.

Kreirajmo program koji generira tok cijelih brojeva koristeći ints() metoda Random klase.

SlučajniBrojPrimjer5.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); } } 

Izlaz 1:

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

Izlaz 2:

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