logo

Sådan genereres tilfældige tal i Java

I Java programmering, krævede vi ofte generere tilfældige tal mens vi udvikler applikationer. Mange applikationer har funktionen til generere tal tilfældigt , såsom at verificere brugeren mange applikationer bruger OTP . Det bedste eksempel på tilfældige tal er terninger. For når vi kaster den, får vi et tilfældigt tal mellem 1 og 6.

I dette afsnit vil vi lære, hvad der er en tilfældigt tal og hvordan man genererer tilfældige tal i Java .

Tilfældigt tal

Tilfældige tal er de tal, der bruger et stort sæt tal og vælger et tal ved hjælp af den matematiske algoritme. Den opfylder følgende to betingelser:

  • De genererede værdier er ensartet fordelt over et bestemt interval.
  • Det er umuligt at gætte den fremtidige værdi baseret på nuværende og tidligere værdier.

Generering af tilfældigt tal i Java

I Java er der tre-vejs til at generere tilfældige tal ved hjælp af metoden og klasserne.

  • Bruger tilfældig() Metode
  • Bruger tilfældig Klasse
  • Bruger ThreadLocalTilfældig Klasse
  • Bruger ints() Metode (i Java 8)

Brug af Math.random() metoden

Java Matematik klasse har mange metoder til forskellige matematiske operationer. En af dem er tilfældig() metode. Det er en statisk matematikklassens metode. Vi kan påberåbe det direkte. Det genererer kun dobbelt skriv tilfældigt tal større end eller lig med 0,0 og mindre end 1,0 . Før vi bruger random() metoden, skal vi importerejava.lang.Mathklasse.

Syntaks:

 public static double random() 

Den accepterer ikke nogen parameter. Det returnerer en pseudorandom double, der er større end eller lig med 0,0 og mindre end 1,0.

Lad os lave et program, der genererer tilfældige tal ved hjælp af 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()); } } 

Produktion:

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

Husk: Hver gang får vi et andet output, når vi udfører programmet. Dit output kan afvige fra outputtet vist ovenfor.

java med swing

Vi kan også bruge følgende formel, hvis vi ønsker at generere et tilfældigt tal mellem et specificeret område.

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

I ovenstående formel er min-værdien inkluderende, mens max-værdien er eksklusiv.

Lad os lave et program, der genererer tilfældige tal mellem 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); } } 

Output 1:

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

Output 2:

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

Brug af den tilfældige klasse

En anden måde at generere et tilfældigt tal på er at bruge Java tilfældig klasse afjava.utilpakke. Det genererer en strøm af pseudorandom-numre. Vi kan generere et tilfældigt tal af enhver datatype, såsom heltal, float, double, Boolean, long. Hvis du vil bruge denne klasse til at generere tilfældige tal, skal du følge trinene nedenfor:

  • Importer først klassenjava.lang.Random.
  • Opret en objekt af Tilfældig klasse.
  • Brug en af ​​følgende metoder:
  • nextInt(int bundet) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

Alle ovenstående metoder returnerer den næste pseudotilfældige, homogent fordelte værdi (tilsvarende metode) fra denne tilfældige talgenerators sekvens. Det nextDouble() og nextFloat() metode genererer tilfældig værdi mellem 0,0 og 1,0.

Det nextInt(int bundet) metode accepterer en parametergrænse (øvre), der skal være positiv. Det genererer et tilfældigt tal i området 0 til bound-1.

Lad os lave et program, der genererer tilfældige tal ved hjælp af klassen Random.

RandomNumberExample3.java

forskudt højde
 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); } } 

Produktion:

 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 

Brug af ThreadLocalRandom Class

Det ThreadLocalTilfældig klasse er defineret ijava.util.samtidigpakke. Den initialiseres med et internt genereret frø, det samme som tilfældig generator af Math-klassen. Det kan ikke ændres. Vi kan bruge denne klasse på følgende måde:

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

Hvor X er Int, Lang osv.

Bemærk: Det er umuligt at dele en ThreadLocalRandom med flere tråde ved et uheld.

Vi kan generere et tilfældigt tal af enhver datatype, såsom heltal, float, double, Boolean, long. Hvis du vil bruge denne klasse til at generere tilfældige tal, skal du følge trinene nedenfor:

  • Importer først klassen ved at brugejava.util.concurrent.ThreadLocalRandom.
  • Kald den tilsvarende metode, som du vil generere tal tilfældigt for.
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

Alle ovenstående metoder tilsidesætter den tilsvarende metode i klassen Random og returnerer den tilsvarende værdi.

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

Ovenstående metoder analyserer en parameter bundet (øvre) det skal være positiv . Det returnerer tilsvarende tilfældigt genereret værdi mellem 0 (inklusive) og den angivne grænse (eksklusiv). Det kaster IllegalArgumentExcetion hvis grænsen er negativ.

    næsteInt(int oprindelse, int bundet) nextDouble(int oprindelse, int bundet) nextLong(int oprindelse, int bundet)

Ovenstående metoder analyserer to parametre oprindelse og bundet . Oprindelsen angiver mindste værdi returneres, og bundet angiver øvre grænse . Det returnerer tilsvarende tilfældigt genereret værdi mellem den angivne oprindelse (inklusive) og bundet (eksklusiv). Også kaster IllegalArgumentExcetion hvis oprindelsen er større end eller lig med bundet.

Lad os lave et program, der genererer tilfældige tal ved hjælp af 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); } } 

Output 1:

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

Output 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 bruge andre metoder til ThreadLocal Randomclass .

Generering af tilfældige tal i Java 8

I Java 8 er en ny metode ints() blevet tilføjet til Tilfældig klasse . Vi skal importerejava.util.Randomfør du bruger metoden.

ints():

De pseudotilfældige int-værdier genererede det samme som at kalde nextInt()-metoden. Det returnerer en ubegrænset strøm af pseudorandom int-værdier.

ints (lang strømStørrelse):

Metoden analyserer en parameter strømstørrelse af typen lang. Det angiver antallet af værdier, der skal genereres. De pseudotilfældige int-værdier genererede det samme som at kalde nextInt()-metoden. Det returnerer også en strøm af tilfældigt genererede int-værdier. Det kaster UlovligArgumentundtagelse hvis strømstørrelsen er mindre end nul.

ints(lang strømStørrelse, int randomNumberOrigin, int randomNumberBound):

Parametre:

    strømstørrelse:Antal værdier, der skal genereres.randomNumberOrigin:Oprindelse af hver tilfældig værdirandomNumberBound:Afgrænset af hver tilfældig værdi

Det returnerer en strøm af pseudorandom int-værdier med den angivne oprindelse og bundet. Det kaster UlovligArgumentundtagelse hvis:

  • stramStørrelse<0< li>
  • oprindelse > = bundet
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametre:

cpld vs FPGA
randomNumberOrigin:Oprindelse af hver tilfældig værdirandomNumberBound:Bundet af hver tilfældig værdi

Det returnerer en ubegrænset strøm af pseudorandom int-værdier med den angivne oprindelse og bundet. Det kaster UlovligArgumentundtagelse hvis oprindelsen er større end eller lig med bundet.

På samme måde kan vi også generere strømmen af ​​lange og dobbelte typer ved at bruge længes () og fordobler() metode.

Lad os skabe et program, der genererer en strøm af heltal ved hjælp af ints() metoden til klassen Random.

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

Output 1:

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

Output 2:

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