logo

Kuinka luoda satunnaislukuja Javassa

Sisään Java ohjelmointia, vaadimme usein tuottaa satunnaislukuja kun kehitämme sovelluksia. Monissa sovelluksissa on ominaisuus luo numeroita satunnaisesti , kuten tarkistaa käyttäjän monet sovellukset käyttävät OTP . Paras esimerkki satunnaisluvuista on noppa. Koska kun heitämme sen, saamme satunnaisluvun väliltä 1-6.

Tässä osiossa opimme, mikä on a satunnainen numero ja kuinka luoda satunnaislukuja Java .

Satunnaisluku

Satunnaisluvut ovat lukuja, jotka käyttävät suurta joukkoa lukuja ja valitsevat luvun matemaattisen algoritmin avulla. Se täyttää seuraavat kaksi ehtoa:

  • Luodut arvot jakautuvat tasaisesti tietylle ajanjaksolle.
  • Tulevaa arvoa on mahdotonta arvata nykyisten ja menneiden arvojen perusteella.

Satunnaislukujen luominen Javassa

Javassa on kolme tapaa luoda satunnaislukuja menetelmällä ja luokilla.

  • Käyttämällä satunnainen () Menetelmä
  • Käyttämällä satunnainen Luokka
  • Käyttämällä ThreadLocalRandom Luokka
  • Käyttämällä ints() Menetelmä (Java 8:ssa)

Käyttämällä Math.random()-menetelmää

Java Matematiikka luokassa on monia menetelmiä erilaisille matemaattisille operaatioille. Yksi niistä on satunnainen () menetelmä. Se on a staattinen matematiikan luokan menetelmä. Voimme vedota siihen suoraan. Se tuottaa vain kaksinkertainen kirjoita satunnaisluku suurempi tai yhtä suuri kuin 0,0 ja alle 1,0 . Ennen random()-menetelmän käyttöä meidän on tuotavajava.lang.Mathluokkaa.

Syntaksi:

 public static double random() 

Se ei hyväksy mitään parametreja. Se palauttaa näennäissatunnaisen kaksinkertaisen, joka on suurempi tai yhtä suuri kuin 0,0 ja pienempi kuin 1,0.

Tehdään ohjelma, joka luo satunnaislukuja random()-menetelmällä.

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()); } } 

Lähtö:

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

Muistaa: Joka kerta, kun saamme eri tulosteen, kun suoritamme ohjelman. Tulostuksesi voi poiketa yllä esitetystä.

Voimme myös käyttää seuraavaa kaavaa, jos haluamme luoda satunnaisluvun tietyn alueen väliin.

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

Yllä olevassa kaavassa minimiarvo sisältää, kun taas enimmäisarvo on poissulkeva.

Tehdään ohjelma, joka luo satunnaislukuja välillä 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); } } 

Tulos 1:

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

Tulos 2:

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

Satunnaisluokan käyttö

Toinen tapa luoda satunnaisluku on käyttää Java satunnainen luokkaa -ltajava.utilpaketti. Se luo pseudosatunnaislukuvirran. Voimme luoda satunnaisluvun mitä tahansa tietotyyppiä, kuten kokonaisluku, float, double, Boolean, long. Jos aiot käyttää tätä luokkaa satunnaislukujen luomiseen, noudata alla olevia ohjeita:

  • Tuo ensin luokkajava.lang.Satunnainen.
  • Luo an esine Random-luokasta.
  • Käytä jotakin seuraavista tavoista:
  • nextInt(int sidottu) nextInt() nextFloat() nextDouble() seuraavaLong() nextBoolean()

Kaikki yllä olevat menetelmät palauttavat seuraavan näennäissatunnaisen, tasaisesti jakautuneen arvon (vastaavan menetelmän) tästä satunnaislukugeneraattorin sekvenssistä. The nextDouble() ja nextFloat() menetelmä luo satunnaisarvon välillä 0,0 ja 1,0.

The nextInt(int sidottu) menetelmä hyväksyy parametrisidon (ylemmän), jonka on oltava positiivinen. Se luo satunnaisluvun välillä 0 - bound-1.

Tehdään ohjelma, joka luo satunnaislukuja Random-luokan avulla.

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); } } 

Lähtö:

 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-luokan käyttäminen

The ThreadLocalRandom luokka on määriteltyjava.util.concurrentpaketti. Se alustetaan sisäisesti luodulla siemenellä, joka on sama kuin Math-luokan satunnaisgeneraattori. Sitä ei voi muokata. Voimme käyttää tätä luokkaa seuraavalla tavalla:

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

Missä X on Int, Long jne.

Huomautus: On mahdotonta jakaa ThreadLocalRandomia useiden säikeiden kanssa vahingossa.

Voimme luoda satunnaisluvun mitä tahansa tietotyyppiä, kuten kokonaisluku, float, double, Boolean, long. Jos aiot käyttää tätä luokkaa satunnaislukujen luomiseen, noudata alla olevia ohjeita:

  • Tuo ensin luokka käyttämälläjava.util.concurrent.ThreadLocalRandom.
  • Kutsu vastaava menetelmä, jolle haluat luoda numeroita satunnaisesti.
  • nextInt() nextDouble() seuraavaLong() nextFloat() nextBoolean()

Kaikki yllä olevat menetelmät ohittavat Random-luokan vastaavan menetelmän ja palauttavat vastaavan arvon.

java muuntaa kokonaisluvun merkkijonoksi
    nextInt(int sidottu) nextDouble(in sidottu) seuraavaPitkä (sis. sidottu)

Yllä olevat menetelmät jäsentävät parametrin sidottu (ylempi) sen täytyy olla positiivinen . Se palauttaa vastaavan satunnaisesti luodun arvon välillä 0 (mukaan lukien) ja määritetyn rajan (poissulkeva) välillä. Se heittää IllegalArgumentExcetion jos raja on negatiivinen.

    nextInt(int origin, int bound) seuraavaKaksois(int origin, int sidottu) seuraavaPitkä(int origin, int sidottu)

Yllä olevat menetelmät jäsentävät kaksi parametria alkuperää ja sidottu . Alkuperä määrittää pienin arvo palautetaan ja sidottu määrittää yläraja . Se palauttaa vastaavan satunnaisesti luodun arvon määritetyn alkuperän (mukaan lukien) ja sidotun (poissulkeva) välillä. Myös heittoja IllegalArgumentExcetion jos origo on suurempi tai yhtä suuri kuin sidottu.

Luodaan ohjelma, joka luo satunnaislukuja käyttämällä ThreadLocalRandom-luokka .

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); } } 

Tulos 1:

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

Tulos 2:

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

Samalla tavalla voimme käyttää muita menetelmiä ThreadLocalRandomclass .

Satunnaislukujen luominen Java 8:ssa

Java 8:ssa uusi menetelmä ints() on lisätty Satunnainen luokka . Meidän on tuotavajava.util.Satunnainenennen menetelmän käyttöä.

ints():

Näennäissatunnaiset int-arvot syntyvät samoin kuin nextInt()-metodin kutsuminen. Se palauttaa rajoittamattoman virran näennäissatunnaisia ​​int-arvoja.

ints (pitkä streamSize):

Menetelmä jäsentää parametrin streamSize tyyppiä pitkä. Se määrittää luotavien arvojen määrän. Näennäissatunnaiset int-arvot syntyvät samoin kuin nextInt()-metodin kutsuminen. Se palauttaa myös satunnaisesti luotujen int-arvojen virran. Se heittää IllegalArgumentException jos virran koko on pienempi kuin nolla.

ints(pitkä streamSize, int satunnainenNumberOrigin, int satunnainenNumberBound):

Parametrit:

    virran koko:Luotavien arvojen määrä.randomNumberOrigin:Jokaisen satunnaisarvon alkuperärandomNumberBound:Jokaisen satunnaisen arvon rajoitus

Se palauttaa näennäissatunnaisten int-arvojen virran määritetyllä alkuperällä ja sidotuksella. Se heittää IllegalArgumentException jos:

  • stramSize<0< li>
  • alkuperä > = sidottu
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametrit:

randomNumberOrigin:Jokaisen satunnaisarvon alkuperärandomNumberBound:Jokaisen satunnaisen arvon rajoitus

Se palauttaa rajoittamattoman virran näennäissatunnaisia ​​int-arvoja määritetyllä alkuperällä ja sidottuilla. Se heittää IllegalArgumentException jos origo on suurempi tai yhtä suuri kuin sidottu.

Vastaavasti voimme myös luoda pitkän ja kaksoistyypin virran käyttämällä pitkät () ja tuplaa () menetelmällä.

Luodaan ohjelma, joka luo kokonaislukuvirran käyttämällä ints() Random-luokan menetelmä.

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); } } 

Tulos 1:

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

Tulos 2:

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