logo

Kaip sugeneruoti atsitiktinius skaičius Java

Į Java programavimas, dažnai to reikalaudavome generuoti atsitiktinius skaičius kol kuriame programas. Daugelis programų turi šią funkciją generuoti skaičius atsitiktinai , pavyzdžiui, norint patikrinti vartotoją, daugelis programų naudoja OTP . Geriausias atsitiktinių skaičių pavyzdys yra kauliukai. Nes mesdami jį gauname atsitiktinį skaičių nuo 1 iki 6.

Šiame skyriuje sužinosime, kas yra a atsitiktinis skaičius ir kaip generuoti atsitiktinius skaičius Java .

Atsitiktinis skaičius

Atsitiktiniai skaičiai yra skaičiai, kurie naudoja didelį skaičių rinkinį ir pasirenka skaičių naudodami matematinį algoritmą. Jis atitinka šias dvi sąlygas:

  • Sugeneruotos vertės tolygiai paskirstytos per tam tikrą intervalą.
  • Neįmanoma atspėti būsimos vertės remiantis dabartinėmis ir praeities vertėmis.

Atsitiktinių skaičių generavimas Java

„Java“ yra trys būdai, kaip generuoti atsitiktinius skaičius naudojant metodą ir klases.

  • Naudojant atsitiktinis () Metodas
  • Naudojant atsitiktinis Klasė
  • Naudojant ThreadLocalRandom Klasė
  • Naudojant ints () Metodas („Java 8“)

Naudojant Math.random() metodą

Java Matematika klasėje yra daug metodų įvairioms matematinėms operacijoms. Vienas iš jų yra atsitiktinis () metodas. Tai yra statinis matematikos klasės metodas. Galime iškviesti jį tiesiogiai. Jis tik generuoja dvigubai įveskite atsitiktinį skaičių didesnis arba lygus 0,0 ir mažiau nei 1,0 . Prieš naudodami random() metodą, turime importuotijava.lang.Mathklasė.

Sintaksė:

 public static double random() 

Jis nepriima jokių parametrų. Jis grąžina pseudoatsitiktinį dvigubą skaičių, kuris yra didesnis arba lygus 0,0 ir mažesnis nei 1,0.

java operatorius

Sukurkime programą, kuri generuoja atsitiktinius skaičius naudojant random() metodą.

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

Išvestis:

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

Prisiminti: Kiekvieną kartą, kai vykdome programą, gauname skirtingą išvestį. Jūsų išvestis gali skirtis nuo aukščiau nurodytos išvesties.

Taip pat galime naudoti šią formulę, jei norime sugeneruoti atsitiktinį skaičių tarp nurodyto diapazono.

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

Aukščiau pateiktoje formulėje minimali vertė yra įtraukta, o maksimali vertė yra išskirtinė.

Sukurkime programą, kuri generuoja atsitiktinius skaičius nuo 200 iki 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); } } 

1 išvestis:

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

2 išvestis:

eilutę į sveikąjį skaičių Java
 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

Atsitiktinės klasės naudojimas

Kitas būdas sugeneruoti atsitiktinį skaičių yra naudoti Java atsitiktinis klasėjava.utilpaketą. Jis generuoja pseudoatsitiktinių skaičių srautą. Galime sugeneruoti atsitiktinį bet kokio tipo duomenų skaičių, pvz., sveikasis skaičius, plūduriuojantis, dvigubas, Būlio, ilgas. Jei ketinate naudoti šią klasę atsitiktiniams skaičiams generuoti, atlikite toliau nurodytus veiksmus.

  • Pirma, importuokite klasęjava.lang.Atsitiktinis.
  • Sukurti an objektas atsitiktinės klasės.
  • Iškvieskite bet kurį iš šių metodų:
  • nextInt (susirišta) nextInt() nextFloat() nextDouble() nextLong () nextBoolean()

Visi aukščiau pateikti metodai iš šios atsitiktinių skaičių generatoriaus sekos grąžina kitą pseudoatsitiktinę, homogeniškai paskirstytą reikšmę (atitinkamą metodą). The nextDouble() ir nextFloat() metodas generuoja atsitiktinę vertę nuo 0,0 iki 1,0.

The nextInt (susirišta) metodas priima parametro ribą (viršutinį), kuris turi būti teigiamas. Jis generuoja atsitiktinį skaičių nuo 0 iki ribinio-1.

Sukurkime programą, kuri generuoja atsitiktinius skaičius naudojant Random klasę.

javascript window.open

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

Išvestis:

 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 

Naudojant ThreadLocalRandom klasę

The ThreadLocalRandom klasė yra apibrėžtajava.util.concurrentpaketą. Jis inicijuojamas naudojant viduje sugeneruotą sėklą, tokią pačią kaip matematikos klasės atsitiktinių generatorių. Jo negalima modifikuoti. Šią klasę galime naudoti taip:

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

Kur X yra Int, Long ir kt.

Pastaba: Neįmanoma netyčia bendrinti ThreadLocalRandom su keliomis gijomis.

Galime sugeneruoti atsitiktinį bet kokio tipo duomenų skaičių, pvz., sveikasis skaičius, plūduriuojantis, dvigubas, Būlio, ilgas. Jei ketinate naudoti šią klasę atsitiktiniams skaičiams generuoti, atlikite toliau nurodytus veiksmus.

  • Pirmiausia importuokite klasę naudodamijava.util.concurrent.ThreadLocalRandom.
  • Iškvieskite atitinkamą metodą, kuriam norite atsitiktinai generuoti skaičius.
  • nextInt() nextDouble() nextLong () nextFloat() nextBoolean()

Visi aukščiau pateikti metodai nepaiso atitinkamo atsitiktinės klasės metodo ir grąžina atitinkamą reikšmę.

    nextInt (susirišta) kitasDvigubas (susirištas) kitasLongas (susirištas)

Aukščiau pateikti metodai analizuoja parametrą surištas (viršutinė) taip turi būti teigiamas . Jis grąžina atitinkamą atsitiktinai sugeneruotą reikšmę nuo 0 (imtinai) iki nurodytos ribos (išskyrus). Tai meta IllegalArgumentExcetion jei riba yra neigiama.

    nextInt(vidinė kilmė, vidinė įrišta) kitasDvigubas(vidinė kilmė, vidinė įrišta) kitasIlgas(vidinė kilmė, vidinė įrišta)

Aukščiau pateikti metodai analizuoja du parametrus kilmės ir surištas . Kilmė nurodo mažiausia vertė grąžinama, o įrišimas nurodo viršutinė riba . Jis grąžina atitinkamą atsitiktinai sugeneruotą reikšmę tarp nurodytos kilmės (imtinai) ir ribos (išskyrus). Be to, metimai IllegalArgumentExcetion jei kilmė didesnė arba lygi surištajai.

Sukurkime programą, kuri generuoja atsitiktinius skaičius naudojant ThreadLocalRandom klasė .

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

1 išvestis:

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

2 išvestis:

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

Taip pat galime naudoti kitus metodus ThreadLocalRandomclass .

k artimiausias kaimynas

Atsitiktinių skaičių generavimas Java 8

Java 8 versijoje naujas metodas ints() buvo pridėtas prie Atsitiktinė klasė . Turime importuotijava.util.Atsitiktinisprieš naudodami metodą.

ints():

Pseudoatsitiktinės int reikšmės generuojamos taip pat, kaip ir iškviečiant nextInt() metodą. Jis grąžina neribotą pseudoatsitiktinių int reikšmių srautą.

ints (ilgas srauto dydis):

Metodas analizuoja parametrą srauto dydis ilgio tipo. Jis nurodo generuojamų reikšmių skaičių. Pseudoatsitiktinės int reikšmės generuojamos taip pat, kaip ir iškviečiant nextInt() metodą. Jis taip pat grąžina atsitiktinai sugeneruotų int reikšmių srautą. Tai meta IllegalArgumentException jei srauto dydis yra mažesnis už nulį.

ints (ilgas srauto dydis, int atsitiktinis skaičiusKilmė, int atsitiktinisNumberBound):

Parametrai:

    srauto dydis:Sugeneruotinų verčių skaičius.randomNumberOrigin:Kiekvienos atsitiktinės reikšmės kilmėrandomNumberBound:Kiekvienos atsitiktinės reikšmės riba

Jis grąžina pseudoatsitiktinių int reikšmių srautą su nurodyta kilme ir ribojimu. Tai meta IllegalArgumentException jei:

  • stramSize<0< li>
  • kilmė > = surišta
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametrai:

randomNumberOrigin:Kiekvienos atsitiktinės reikšmės kilmėrandomNumberBound:Kiekvienos atsitiktinės reikšmės riba

Jis grąžina neribotą pseudoatsitiktinių int reikšmių srautą su nurodyta kilme ir ribojimu. Tai meta IllegalArgumentException jei kilmė yra didesnė arba lygi surištajai.

kokie mėnesiai yra Q1

Taip pat galime generuoti ilgų ir dvigubų tipų srautą naudodami ilgisi () ir dvigubai () metodas, atitinkamai.

Sukurkime programą, kuri generuoja sveikųjų skaičių srautą naudojant ints () Atsitiktinės klasės metodas.

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

1 išvestis:

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

2 išvestis:

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