logo

Hvordan generere tilfeldige tall i Java

I Java programmering, krevde vi ofte generere tilfeldige tall mens vi utvikler applikasjoner. Mange applikasjoner har funksjonen til generere tall tilfeldig , for eksempel for å bekrefte brukeren mange applikasjoner bruker OTP . Det beste eksemplet på tilfeldige tall er terninger. For når vi kaster det, får vi et tilfeldig tall mellom 1 og 6.

I denne delen vil vi lære hva som er en tilfeldig tall og hvordan generere tilfeldige tall i Java .

Tilfeldig nummer

Tilfeldige tall er tallene som bruker et stort sett med tall og velger et tall ved hjelp av den matematiske algoritmen. Den oppfyller følgende to betingelser:

  • De genererte verdiene jevnt fordelt over et bestemt intervall.
  • Det er umulig å gjette fremtidig verdi basert på nåværende og tidligere verdier.

Generer tilfeldig tall i Java

I Java er det treveis å generere tilfeldige tall ved å bruke metoden og klassene.

  • Bruker tilfeldig() Metode
  • Bruker tilfeldig Klasse
  • Bruker ThreadLocalTilfeldig Klasse
  • Bruker ints() Metode (i Java 8)

Bruke Math.random()-metoden

Java Matte klasse har mange metoder for ulike matematiske operasjoner. En av dem er tilfeldig() metode. Det er en statisk metoden for matematikkklassen. Vi kan påkalle det direkte. Det genererer bare dobbelt skriv tilfeldig tall større enn eller lik 0,0 og mindre enn 1,0 . Før vi bruker random()-metoden, må vi importerejava.lang.Mathklasse.

Syntaks:

 public static double random() 

Den godtar ingen parameter. Den returnerer en pseudorandom dobbel som er større enn eller lik 0,0 og mindre enn 1,0.

La oss lage et program som genererer tilfeldige tall ved å bruke random()-metoden.

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

Produksjon:

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

Huske: Hver gang får vi en annen utgang når vi kjører programmet. Utdataene dine kan avvike fra utdataene vist ovenfor.

tilfeldig ikke i java

Vi kan også bruke følgende formel hvis vi vil generere et tilfeldig tall mellom et spesifisert område.

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

I formelen ovenfor er min-verdien inkluderende mens maksverdien er eksklusiv.

La oss lage et program som genererer tilfeldige tall mellom 200 og 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); } } 

Utgang 1:

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

Utgang 2:

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

Bruke den tilfeldige klassen

En annen måte å generere et tilfeldig tall på er å bruke Java tilfeldig klasse avjava.utilpakke. Det genererer en strøm av pseudorandom-tall. Vi kan generere et tilfeldig antall av en hvilken som helst datatype, for eksempel heltall, float, double, boolsk, lang. Hvis du skal bruke denne klassen til å generere tilfeldige tall, følg trinnene nedenfor:

  • Først importerer du klassenjava.lang.Random.
  • Opprett en gjenstand av klassen tilfeldig.
  • Påkall en av følgende metoder:
  • nextInt(int bundet) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

Alle metodene ovenfor returnerer den neste pseudotilfeldige, homogent fordelte verdien (tilsvarende metode) fra denne tilfeldige tallgeneratorens sekvens. De nextDouble() og nextFloat() metoden genererer tilfeldig verdi mellom 0,0 og 1,0.

De nextInt(int bundet) metode aksepterer en parametergrense (øvre) som må være positiv. Den genererer et tilfeldig tall i området 0 til bound-1.

La oss lage et program som genererer tilfeldige tall ved hjelp av Random-klassen.

RandomNumberExample3.java

forskjøvet høyde
 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); } } 

Produksjon:

 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 

Bruke ThreadLocalRandom Class

De ThreadLocalTilfeldig klasse er definert ijava.util.samtidigpakke. Den initialiseres med et internt generert frø, det samme som tilfeldiggeneratoren til matematikkklassen. Det kan ikke endres. Vi kan bruke denne klassen på følgende måte:

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

Hvor X er Int, Long osv.

Merk: Det er umulig å dele en ThreadLocalRandom med flere tråder ved et uhell.

Vi kan generere et tilfeldig antall av en hvilken som helst datatype, for eksempel heltall, float, double, boolsk, lang. Hvis du skal bruke denne klassen til å generere tilfeldige tall, følg trinnene nedenfor:

  • Først importerer du klassen ved å brukejava.util.concurrent.ThreadLocalRandom.
  • Påkall den tilsvarende metoden som du vil generere tall tilfeldig for.
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

Alle metodene ovenfor overstyrer den tilsvarende metoden til Random-klassen og returnerer den tilsvarende verdien.

    nextInt(int bundet) nextDouble(int bundet) nextLong(int bundet)

Metodene ovenfor analyserer en parameter bundet (øvre) det må være positivt . Den returnerer tilsvarende tilfeldig generert verdi mellom 0 (inklusive) og den spesifiserte grensen (eksklusiv). Det kaster IllegalArgumentExcetion hvis grensen er negativ.

    nesteInt(int opprinnelse, int bundet) nextDouble(int opprinnelse, int bundet) nextLong(int opprinnelse, int bundet)

Metodene ovenfor analyserer to parametere opprinnelse og bundet . Opprinnelsen spesifiserer minste verdi returnert og bound spesifiserer øvre grense . Den returnerer tilsvarende tilfeldig generert verdi mellom spesifisert opprinnelse (inklusive) og bundet (eksklusiv). Også kaster IllegalArgumentExcetion hvis opprinnelsen er større enn eller lik bundet.

La oss lage et program som genererer tilfeldige tall ved å bruke ThreadLocalRandom klasse .

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

Utgang 1:

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

Utgang 2:

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

Tilsvarende kan vi bruke andre metoder for ThreadLocal Randomclass .

Generering av tilfeldige tall i Java 8

I Java 8 er en ny metode ints() lagt til Tilfeldig klasse . Vi må importerejava.util.Randomfør du bruker metoden.

ints():

Pseudorandom int-verdiene genererte det samme som å kalle nextInt()-metoden. Den returnerer en ubegrenset strøm av pseudorandom int-verdier.

ints(long streamSize):

Metoden analyserer en parameter strømstørrelse av typen lang. Den spesifiserer antall verdier som skal genereres. Pseudorandom int-verdiene genererte det samme som å kalle nextInt()-metoden. Den returnerer også en strøm av tilfeldig genererte int-verdier. Det kaster UlovligArgumentUnntak hvis strømstørrelsen er mindre enn null.

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

Parametere:

    strømstørrelse:Antall verdier som skal genereres.randomNumberOrigin:Opprinnelsen til hver tilfeldig verdirandomNumberBound:Bundet av hver tilfeldig verdi

Den returnerer en strøm av pseudorandom int-verdier med spesifisert opprinnelse og bundet. Det kaster UlovligArgumentUnntak hvis:

  • stramSize<0< li>
  • opprinnelse > = bundet
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametere:

cpld vs FPGA
randomNumberOrigin:Opprinnelsen til hver tilfeldig verdirandomNumberBound:Bundet av hver tilfeldig verdi

Den returnerer en ubegrenset strøm av pseudorandom int-verdier med spesifisert opprinnelse og bundet. Det kaster UlovligArgumentUnntak hvis opprinnelsen er større enn eller lik bundet.

På samme måte kan vi også generere strømmen av lange og doble typer ved å bruke lengter () og dobler() metode, henholdsvis.

La oss lage et program som genererer en strøm av heltall ved å bruke ints() metoden til Random-klassen.

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

Utgang 1:

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

Utgang 2:

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