In Java často vyžadujeme generovať náhodné čísla zatiaľ čo vyvíjame aplikácie. Mnoho aplikácií má túto funkciu generovať čísla náhodne , napríklad na overenie používateľa, ktorý mnohé aplikácie používajú OTP . Najlepším príkladom náhodných čísel sú kocky. Pretože keď to hodíme, dostaneme náhodné číslo od 1 do 6.
V tejto časti sa dozvieme, čo je a náhodné číslo a ako generovať náhodné čísla Java .
Náhodné číslo
Náhodné čísla sú čísla, ktoré používajú veľkú množinu čísel a vyberajú číslo pomocou matematického algoritmu. Spĺňa tieto dve podmienky:
- Vygenerované hodnoty sú rovnomerne rozdelené v určitom intervale.
- Nie je možné odhadnúť budúcu hodnotu na základe súčasných a minulých hodnôt.
Generovanie náhodného čísla v jazyku Java
V Jave existujú tri spôsoby generovania náhodných čísel pomocou metódy a tried.
- Pomocou náhodný() Metóda
- Pomocou náhodný Trieda
- Pomocou ThreadLocalRandom Trieda
- Pomocou ints() Metóda (v jazyku Java 8)
Pomocou metódy Math.random().
Java Matematika trieda má veľa metód pre rôzne matematické operácie. Jedným z nich je náhodný() metóda. Je to a statické metóda triedy Math. Môžeme ho vyvolať priamo. Vytvára iba dvojitý zadajte náhodné číslo väčšie alebo rovné 0,0 a menej ako 1,0 . Pred použitím metódy random() musíme importovať súborjava.lang.Mathtrieda.
Syntax:
public static double random()
Neakceptuje žiadny parameter. Vráti pseudonáhodný dvojnásobok, ktorý je väčší alebo rovný 0,0 a menší ako 1,0.
Vytvorme program, ktorý generuje náhodné čísla pomocou metódy random().
NáhodnéČísloPrí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ýkon:
1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898
Pamätajte: Zakaždým, keď spustíme program, dostaneme iný výstup. Váš výstup sa môže líšiť od výstupu zobrazeného vyššie.
súkromná vs verejná java
Môžeme tiež použiť nasledujúci vzorec, ak chceme vygenerovať náhodné číslo medzi zadaným rozsahom.
Math.random() * (max - min + 1) + min
Vo vyššie uvedenom vzorci je minimálna hodnota zahrnutá, zatiaľ čo maximálna hodnota je zahrnutá.
Vytvorme program, ktorý generuje náhodné čísla od 200 do 400.
Príklad náhodného čísla2.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:
Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284
Použitie náhodnej triedy
Ďalším spôsobom, ako vygenerovať náhodné číslo, je použiť Java náhodný trieda zjava.utilbalík. Generuje prúd pseudonáhodných čísel. Môžeme vygenerovať náhodné číslo ľubovoľného dátového typu, napríklad celé číslo, float, double, boolean, long. Ak sa chystáte použiť túto triedu na generovanie náhodných čísel, postupujte podľa krokov uvedených nižšie:
- Najprv importujte triedujava.lang.Náhodný.
- Vytvorte objekt triedy Náhodný.
- Vyvolajte ktorúkoľvek z nasledujúcich metód:
Všetky vyššie uvedené metódy vracajú nasledujúcu pseudonáhodnú, homogénne distribuovanú hodnotu (zodpovedajúca metóda) zo sekvencie tohto generátora náhodných čísel. The nextDouble() a nextFloat() metóda generuje náhodnú hodnotu medzi 0,0 a 1,0.
The nextInt (int bound) metóda prijíma parameter viazaný (horný), ktorý musí byť kladný. Vygeneruje náhodné číslo v rozsahu 0 až hranica-1.
Vytvorme program, ktorý generuje náhodné čísla pomocou triedy Random.
Prí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ýkon:
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
Použitie triedy ThreadLocalRandom
The ThreadLocalRandom trieda je definovaná vjava.util.concurrentbalík. Inicializuje sa interne vygenerovaným semienkom, rovnakým ako náhodný generátor triedy Math. Nedá sa upraviť. Túto triedu môžeme použiť nasledujúcim spôsobom:
ThreadLocalRandom.current().nextX(...)
Kde X je Int, Long atď.
Poznámka: Nie je možné náhodne zdieľať ThreadLocalRandom s viacerými vláknami.
Môžeme vygenerovať náhodné číslo ľubovoľného dátového typu, napríklad celé číslo, float, double, boolean, long. Ak sa chystáte použiť túto triedu na generovanie náhodných čísel, postupujte podľa krokov uvedených nižšie:
- Najprv importujte triedu pomocoujava.util.concurrent.ThreadLocalRandom.
- Vyvolajte zodpovedajúcu metódu, pre ktorú chcete náhodne generovať čísla.
Všetky vyššie uvedené metódy prepíšu zodpovedajúcu metódu triedy Random a vrátia zodpovedajúcu hodnotu.
Vyššie uvedené metódy analyzujú parameter viazaný (horné) to musí byť pozitívne . Vráti zodpovedajúcu náhodne vygenerovanú hodnotu medzi 0 (vrátane) a zadanou hranicou (bez). To hádže IllegalArgumentExcetion ak je hranica záporná.
Vyššie uvedené metódy analyzujú dva parametre pôvodu a viazaný . Pôvod špecifikuje najmenšia hodnota vrátené a väzba špecifikuje Horná hranica . Vracia zodpovedajúcu náhodne vygenerovanú hodnotu medzi zadaným počiatkom (vrátane) a hranicou (výlučne). Tiež hody IllegalArgumentExcetion ak je počiatok väčší alebo rovný viazanému.
Vytvorme program, ktorý generuje náhodné čísla pomocou ThreadLocalRandom trieda .
podreťazec reťazec java
Príklad náhodného čísla4.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
Podobne môžeme použiť aj iné metódy ThreadLocalRandomclass .
Generovanie náhodných čísel v Java 8
V jazyku Java 8 bola do súboru pridaná nová metóda ints(). Náhodná trieda . Musíme importovaťjava.util.Randompred použitím metódy.
ints():
Pseudonáhodné hodnoty int sa vygenerovali rovnako ako pri volaní metódy nextInt(). Vracia neobmedzený prúd pseudonáhodných int hodnôt.
ints (veľkosť dlhého prúdu):
Metóda analyzuje parameter streamSize typu dlhý. Určuje počet hodnôt, ktoré sa majú vygenerovať. Pseudonáhodné hodnoty int sa vygenerovali rovnako ako pri volaní metódy nextInt(). Tiež vráti tok náhodne generovaných hodnôt int. To hádže IllegalArgumentException ak je veľkosť prúdu menšia ako nula.
ints(long streamSize, int randomNumberOrigin, int randomNumberBound):
Parametre:
Vracia prúd pseudonáhodných int hodnôt so zadaným pôvodom a hranicou. To hádže IllegalArgumentException ak:
- stramSize<0< li>
- pôvod > = viazaný 0<>
ints(int randomNumberOrigin, int randomNumberBound):
Parametre:
Vracia neobmedzený prúd pseudonáhodných int hodnôt so zadaným pôvodom a viazanosťou. To hádže IllegalArgumentException ak je počiatok väčší alebo rovný viazanému.
Podobne môžeme tiež generovať prúd dlhých a dvojitých typov pomocou dlho() a double() spôsob, resp.
Poďme vytvoriť program, ktorý generuje prúd celých čísel pomocou ints() metóda triedy Random.
Prí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