logo

Hoe een willekeurig getal in Java te genereren

In Java programmeren, dat moesten we vaak doen willekeurige getallen genereren terwijl wij applicaties ontwikkelen. Veel applicaties hebben de functie om willekeurig getallen genereren , om de gebruiker te verifiëren, gebruiken veel applicaties de OTP . Het beste voorbeeld van willekeurige getallen zijn dobbelstenen. Want als we ermee gooien, krijgen we een willekeurig getal tussen 1 en 6.

In dit gedeelte zullen we leren wat een willekeurig nummer En hoe willekeurige getallen te genereren Java .

Willekeurig nummer

Willekeurige getallen zijn de getallen die een grote reeks getallen gebruiken en een getal selecteren met behulp van het wiskundige algoritme. Het voldoet aan de volgende twee voorwaarden:

  • De gegenereerde waarden zijn gelijkmatig verdeeld over een bepaald interval.
  • Het is onmogelijk om de toekomstige waarde te raden op basis van huidige en vroegere waarden.

Willekeurig getal genereren in Java

In Java zijn er drie manieren om willekeurige getallen te genereren met behulp van de methode en klassen.

  • De ... gebruiken willekeurig() Methode
  • De ... gebruiken willekeurig Klas
  • De ... gebruiken ThreadLokaalRandom Klas
  • De ... gebruiken int() Werkwijze (in Java 8)

Met behulp van de Math.random()-methode

De Java Wiskunde klasse heeft veel methoden voor verschillende wiskundige bewerkingen. Eén daarvan is de willekeurig() methode. Het is een statisch methode van de klasse Math. Wij kunnen er direct een beroep op doen. Het genereert alleen maar dubbele typ willekeurig getal groter dan of gelijk aan 0,0 En minder dan 1,0 . Voordat we de methode random() gebruiken, moeten we dejava.lang.Mathklas.

vlc youtube downloaden

Syntaxis:

 public static double random() 

Het accepteert geen enkele parameter. Het retourneert een pseudowillekeurig dubbel dat groter is dan of gelijk is aan 0,0 en kleiner dan 1,0.

Laten we een programma maken dat willekeurige getallen genereert met behulp van de methode random().

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

Uitgang:

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

Herinneren: Elke keer krijgen we een andere uitvoer wanneer we het programma uitvoeren. Uw uitvoer kan afwijken van de hierboven weergegeven uitvoer.

We kunnen ook de volgende formule gebruiken als we een willekeurig getal tussen een opgegeven bereik willen genereren.

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

In de bovenstaande formule is de minimale waarde inclusief, terwijl de maximale waarde exclusief is.

Laten we een programma maken dat willekeurige getallen tussen 200 en 400 genereert.

RandomNumberExample2.java

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

Uitgang 1:

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

Uitgang 2:

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

Het gebruik van de willekeurige klasse

Een andere manier om een ​​willekeurig getal te genereren is door gebruik te maken van de Java willekeurig klas van dejava.utilpakket. Het genereert een stroom pseudowillekeurige getallen. We kunnen een willekeurig getal van elk gegevenstype genereren, zoals geheel getal, float, double, Boolean, long. Als u deze klasse gaat gebruiken om willekeurige getallen te genereren, volgt u de onderstaande stappen:

  • Importeer eerst de klassejava.lang.Random.
  • Creëer een voorwerp van de Random-klasse.
  • Roep een van de volgende methoden aan:
  • nextInt(int gebonden) volgendeInt() volgendeFloat() volgendeDubbel() volgendeLang() volgendeBoolean()

Alle bovenstaande methoden retourneren de volgende pseudowillekeurige, homogeen verdeelde waarde (overeenkomende methode) uit de reeks van deze generator voor willekeurige getallen. De volgendeDubbel() En volgendeFloat() methode genereert een willekeurige waarde tussen 0,0 en 1,0.

De nextInt(int gebonden) methode accepteert een parametergrens (bovenste) die positief moet zijn. Het genereert een willekeurig getal in het bereik van 0 tot grens-1.

Laten we een programma maken dat willekeurige getallen genereert met behulp van de klasse Random.

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

Uitgang:

 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 

De klasse ThreadLocalRandom gebruiken

De ThreadLokaalRandom klasse is gedefinieerd injava.util.concurrentpakket. Het wordt geïnitialiseerd met een intern gegenereerd zaad, hetzelfde als de willekeurige generator van de klasse Math. Het kan niet worden gewijzigd. We kunnen deze klasse op de volgende manier gebruiken:

hoe je een string naar een geheel getal converteert in Java
 ThreadLocalRandom.current().nextX(...) 

Waar X Int, Long, enz. is.

Opmerking: het is onmogelijk om een ​​ThreadLocalRandom per ongeluk met meerdere threads te delen.

We kunnen een willekeurig getal van elk gegevenstype genereren, zoals geheel getal, float, double, Boolean, long. Als u deze klasse gaat gebruiken om willekeurige getallen te genereren, volgt u de onderstaande stappen:

  • Importeer eerst de klasse met behulp vanjava.util.concurrent.ThreadLocalRandom.
  • Roep de corresponderende methode aan waarvoor u willekeurig getallen wilt genereren.
  • volgendeInt() volgendeDubbel() volgendeLang() volgendeFloat() volgendeBoolean()

Alle bovenstaande methoden overschrijven de overeenkomstige methode van de klasse Random en retourneren de overeenkomstige waarde.

    nextInt(int gebonden) volgendeDubbel(int gebonden) volgendeLang(int gebonden)

De bovenstaande methoden parseren een parameter gebonden (boven) dat moet zo zijn positief . Het retourneert de corresponderende willekeurig gegenereerde waarde tussen 0 (inclusief) en de opgegeven grens (exclusief). Het gooit Illegaal argumentExcetion als de grens negatief is.

    nextInt(int oorsprong, int gebonden) volgendeDouble(int oorsprong, int gebonden) nextLong(int oorsprong, int gebonden)

De bovenstaande methoden parseren twee parameters oorsprong En gebonden . De oorsprong specificeert de minste waarde geretourneerd en de grens specificeert de bovengrens . Het retourneert de overeenkomstige willekeurig gegenereerde waarde tussen de opgegeven oorsprong (inclusief) en grens (exclusief). Ook gooien Illegaal argumentExcetion als de oorsprong groter is dan of gelijk is aan de grens.

Laten we een programma maken dat willekeurige getallen genereert met behulp van de 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); } } 

Uitgang 1:

beperkingen van elektronisch bankieren
 Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true 

Uitgang 2:

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

Op dezelfde manier kunnen we andere methoden gebruiken ThreadLocalRandom-klasse .

Willekeurige nummergeneratie in Java 8

In Java 8 is een nieuwe methode ints() toegevoegd aan de Willekeurige klasse . We moeten dejava.util.Randomvoordat u de methode gebruikt.

int():

De pseudowillekeurige int-waarden genereerden hetzelfde als het aanroepen van de nextInt()-methode. Het retourneert een onbeperkte stroom pseudowillekeurige int-waarden.

ints(lange stroomgrootte):

c++ int naar tekenreeks

De methode parseert een parameter stroomgrootte van het type lang. Het specificeert het aantal waarden dat moet worden gegenereerd. De pseudowillekeurige int-waarden genereerden hetzelfde als het aanroepen van de nextInt()-methode. Het retourneert ook een stroom willekeurig gegenereerde int-waarden. Het gooit Illegale ArgumentException als de streamgrootte kleiner is dan nul.

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

Parameters:

    stroomgrootte:Aantal te genereren waarden.willekeurig nummerHerkomst:Oorsprong van elke willekeurige waardewillekeurigGetalBound:Gebonden aan elke willekeurige waarde

Het retourneert een stroom pseudowillekeurige int-waarden met de opgegeven oorsprong en grens. Het gooit Illegale ArgumentException als:

  • Stramgrootte<0< li>
  • oorsprong > = gebonden
 ints(int randomNumberOrigin, int randomNumberBound): 

Parameters:

willekeurig nummerHerkomst:Oorsprong van elke willekeurige waardewillekeurigGetalBound:Gebonden aan elke willekeurige waarde

Het retourneert een onbeperkte stroom pseudowillekeurige int-waarden met de opgegeven oorsprong en grens. Het gooit Illegale ArgumentException als de oorsprong groter is dan of gelijk is aan de grens.

Op dezelfde manier kunnen we ook de stroom lange en dubbele typen genereren door gebruik te maken van de verlangt() En verdubbelt() methode, respectievelijk.

Laten we een programma maken dat een stroom gehele getallen genereert met behulp van de int() methode van de Random-klasse.

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

Uitgang 1:

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

Uitgang 2:

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