logo

Jak generovat náhodné číslo v Javě

v Jáva programování, které jsme často vyžadovali generovat náhodná čísla zatímco vyvíjíme aplikace. Mnoho aplikací má funkci generovat čísla náhodně , jako je ověření uživatele, který mnoho aplikací používá OTP . Nejlepším příkladem náhodných čísel jsou kostky. Protože když to hodíme, dostaneme náhodné číslo mezi 1 až 6.

V této části se naučíme, co je a náhodné číslo a jak generovat náhodná čísla Jáva .

Náhodné číslo

Náhodná čísla jsou čísla, která používají velkou sadu čísel a vybírají číslo pomocí matematického algoritmu. Splňuje následující dvě podmínky:

  • Vygenerované hodnoty jsou rovnoměrně rozloženy v určitém intervalu.
  • Je nemožné odhadnout budoucí hodnotu na základě současných a minulých hodnot.

Generování náhodného čísla v Javě

V Javě existuje trojí způsob generování náhodných čísel pomocí metody a tříd.

  • Za použití náhodný() Metoda
  • Za použití náhodný Třída
  • Za použití ThreadLocalRandom Třída
  • Za použití ints() Metoda (v Javě 8)

Pomocí metody Math.random().

Java Matematika třída má mnoho metod pro různé matematické operace. Jedním z nich je náhodný() metoda. Je to a statický metoda třídy Math. Můžeme to vyvolat přímo. Pouze generuje dvojnásobek zadejte náhodné číslo větší nebo rovno 0,0 a méně než 1,0 . Před použitím metody random() musíme importovatjava.lang.Mathtřída.

Syntax:

 public static double random() 

Neakceptuje žádný parametr. Vrací pseudonáhodný dvojnásobek, který je větší nebo roven 0,0 a menší než 1,0.

znak na řetězec java

Vytvořme program, který generuje náhodná čísla pomocí metody random().

NáhodnéNumberPříklad1.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()); } } 

Výstup:

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

Pamatovat si: Pokaždé, když spustíme program, dostaneme jiný výstup. Váš výstup se může lišit od výstupu zobrazeného výše.

Můžeme také použít následující vzorec, pokud chceme generovat náhodné číslo mezi zadaným rozsahem.

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

Ve výše uvedeném vzorci je minimální hodnota včetně, zatímco maximální hodnota je vyloučena.

Vytvořme program, který generuje náhodná čísla mezi 200 až 400.

NáhodnéNumberPříklad2.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); } } 

Výstup 1:

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

Výstup 2:

java matematická třída
 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

Použití náhodné třídy

Dalším způsobem, jak vygenerovat náhodné číslo, je použít Jáva náhodný třída zjava.utilbalík. Generuje proud pseudonáhodných čísel. Můžeme vygenerovat náhodné číslo libovolného datového typu, jako je integer, float, double, Boolean, long. Pokud se chystáte použít tuto třídu ke generování náhodných čísel, postupujte podle následujících kroků:

  • Nejprve importujte třídujava.lang.Náhodný.
  • Vytvořit objekt třídy Náhodný.
  • Vyvolejte kteroukoli z následujících metod:
  • nextInt (int bound) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

Všechny výše uvedené metody vracejí další pseudonáhodnou, homogenně distribuovanou hodnotu (odpovídající metoda) ze sekvence tohoto generátoru náhodných čísel. The nextDouble() a nextFloat() metoda generuje náhodnou hodnotu mezi 0,0 a 1,0.

The nextInt (int bound) metoda přijímá parametr vázaný (horní), který musí být kladný. Vygeneruje náhodné číslo v rozsahu 0 až mez-1.

Vytvořme program, který generuje náhodná čísla pomocí třídy Random.

hodnota řetězce java

Příklad náhodného čísla3.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); } } 

Výstup:

 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 

Pomocí třídy ThreadLocalRandom

The ThreadLocalRandom třída je definována vjava.util.concurrentbalík. Inicializuje se interně generovaným seedem, stejným jako náhodný generátor třídy Math. Nelze jej upravit. Tuto třídu můžeme použít následujícím způsobem:

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

Kde X je Int, Long atd.

Poznámka: Je nemožné náhodně sdílet ThreadLocalRandom s více vlákny.

Můžeme vygenerovat náhodné číslo libovolného datového typu, jako je integer, float, double, Boolean, long. Pokud se chystáte použít tuto třídu ke generování náhodných čísel, postupujte podle následujících kroků:

  • Nejprve importujte třídu pomocíjava.util.concurrent.ThreadLocalRandom.
  • Vyvolejte odpovídající metodu, pro kterou chcete náhodně generovat čísla.
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

Všechny výše uvedené metody přepíší odpovídající metodu třídy Random a vrátí odpovídající hodnotu.

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

Výše uvedené metody analyzují parametr vázaný (horní) to musí být pozitivní . Vrací odpovídající náhodně vygenerovanou hodnotu mezi 0 (včetně) a zadanou hranicí (exkluzivní). To hází IllegalArgumentExcetion pokud je vazba záporná.

    nextInt (počátek int, vazba int) nextDouble (počátek int, vazba int) nextLong(int origin, int bound)

Výše uvedené metody analyzují dva parametry původ a vázaný . Původ určuje nejmenší hodnotu vráceno a vazba určuje horní hranice . Vrací odpovídající náhodně vygenerovanou hodnotu mezi zadaným počátkem (včetně) a hranicí (exkluzivní). Také hází IllegalArgumentExcetion pokud je počátek větší nebo roven vazbě.

Vytvořme program, který generuje náhodná čísla pomocí Třída ThreadLocalRandom .

NáhodnéNumberPříklad4.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); } } 

Výstup 1:

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

Výstup 2:

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

Podobně můžeme použít i jiné metody ThreadLocalRandomclass .

řazení java arraylist

Generování náhodných čísel v Javě 8

V Javě 8 byla přidána nová metoda ints(). Náhodná třída . Musíme importovatjava.util.Randompřed použitím metody.

ints():

Pseudonáhodné hodnoty int byly vygenerovány stejně jako při volání metody nextInt(). Vrací neomezený proud pseudonáhodných int hodnot.

ints (long streamSize):

Metoda analyzuje parametr streamSize typu dlouhý. Určuje počet hodnot, které mají být vygenerovány. Pseudonáhodné hodnoty int byly vygenerovány stejně jako při volání metody nextInt(). Také vrací proud náhodně generovaných hodnot typu int. To hází IllegalArgumentException pokud je velikost proudu menší než nula.

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

Parametry:

    velikost proudu:Počet hodnot, které se mají vygenerovat.randomNumberOrigin:Původ každé náhodné hodnotyrandomNumberBound:Vazba každé náhodné hodnoty

Vrací proud pseudonáhodných int hodnot se zadaným počátkem a hranicí. To hází IllegalArgumentException li:

  • strmSize<0< li>
  • původ > = vázaný
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametry:

randomNumberOrigin:Původ každé náhodné hodnotyrandomNumberBound:Vazba každé náhodné hodnoty

Vrací neomezený proud pseudonáhodných int hodnot se zadaným původem a hranicí. To hází IllegalArgumentException pokud je počátek větší nebo roven vazbě.

přidání java do pole

Podobně můžeme také generovat proud typu long a double pomocí dlouho () a čtyřhra() metoda, resp.

Vytvořme program, který generuje proud celých čísel pomocí ints() metoda třídy Random.

Příklad náhodného čísla5.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); } } 

Výstup 1:

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

Výstup 2:

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