In Java programmēšana, mēs bieži prasījām ģenerēt nejaušus skaitļus kamēr mēs izstrādājam lietojumprogrammas. Daudzām lietojumprogrammām ir šī funkcija ģenerēt skaitļus nejauši , piemēram, lai pārbaudītu lietotāju daudzas lietojumprogrammas izmanto OTP . Labākais izlases skaitļu piemērs ir kauliņi. Jo, kad mēs to izmetam, mēs iegūstam nejaušu skaitli no 1 līdz 6.
Šajā sadaļā mēs uzzināsim, kas ir a nejaušs skaitlis un kā ģenerēt nejaušus skaitļus Java .
Nejaušs skaitlis
Nejaušie skaitļi ir skaitļi, kas izmanto lielu skaitļu kopu un izvēlas skaitli, izmantojot matemātisko algoritmu. Tas atbilst diviem šādiem nosacījumiem:
- Ģenerētās vērtības vienmērīgi sadalītas noteiktā intervālā.
- Nav iespējams uzminēt nākotnes vērtību, pamatojoties uz pašreizējām un pagātnes vērtībām.
Nejaušo skaitļu ģenerēšana Java
Programmā Java ir trīs veidi, kā ģenerēt nejaušus skaitļus, izmantojot metodi un klases.
- Izmantojot nejauši () Metode
- Izmantojot nejauši Klase
- Izmantojot ThreadLocalRandom Klase
- Izmantojot ints() Metode (Java 8)
Izmantojot Math.random() metodi
Java Matemātika klasē ir daudzas metodes dažādām matemātiskām operācijām. Viens no tiem ir nejauši () metodi. Tas ir statisks matemātikas klases metode. Mēs varam to izsaukt tieši. Tas rada tikai dubultā ierakstiet izlases numuru lielāks vai vienāds ar 0,0 un mazāks par 1,0 . Pirms random() metodes izmantošanas mums ir jāimportējava.lang.Mathklasē.
Sintakse:
public static double random()
Tas nepieņem nevienu parametru. Tas atgriež pseidogadījuma dubulto vērtību, kas ir lielāka vai vienāda ar 0,0 un mazāka par 1,0.
Izveidosim programmu, kas ģenerē nejaušus skaitļus, izmantojot random() metodi.
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()); } }
Izvade:
1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898
Atcerieties: Katru reizi, kad mēs izpildām programmu, mēs iegūstam citu izvadi. Jūsu izvade var atšķirties no iepriekš redzamās izvades.
Mēs varam izmantot arī šādu formulu, ja vēlamies ģenerēt nejaušu skaitli starp noteiktu diapazonu.
Math.random() * (max - min + 1) + min
Iepriekš minētajā formulā minimālā vērtība ir iekļauta, bet maksimālā vērtība ir ekskluzīva.
pandu sērijas iezīmes
Izveidosim programmu, kas ģenerē nejaušus skaitļus no 200 līdz 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. izvads:
Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329
2. izvads:
Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284
Izmantojot izlases klasi
Vēl viens veids, kā ģenerēt nejaušu skaitli, ir izmantot Java nejauši klasē nojava.utiliepakojums. Tas ģenerē pseidogadījuma skaitļu plūsmu. Mēs varam ģenerēt jebkura veida datu nejaušu skaitu, piemēram, vesels skaitlis, peldošs, dubults, Būla, garš. Ja plānojat izmantot šo klasi, lai ģenerētu nejaušus skaitļus, veiciet tālāk norādītās darbības.
- Pirmkārt, importējiet klasijava.lang.Random.
- Izveidojiet an objektu no Random klases.
- Izsauciet kādu no šīm metodēm:
Visas iepriekš minētās metodes atgriež nākamo pseidogadījuma, viendabīgi sadalīto vērtību (atbilstošo metodi) no šīs nejaušo skaitļu ģeneratora secības. The nākamaisDouble() un nextFloat() metode ģenerē nejaušības vērtību no 0,0 līdz 1,0.
The nextInt(int bound) metode pieņem parametra ierobežojumu (augšējo), kam jābūt pozitīvam. Tas ģenerē nejaušu skaitli diapazonā no 0 līdz bound-1.
Izveidosim programmu, kas ģenerē nejaušus skaitļus, izmantojot Random klasi.
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); } }
Izvade:
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
Izmantojot ThreadLocalRandom klasi
The ThreadLocalRandom klase ir definētajava.util.concurrentiepakojums. Tas tiek inicializēts ar iekšēji ģenerētu sēklu, kas ir tāds pats kā matemātikas klases nejaušības ģenerators. To nevar modificēt. Mēs varam izmantot šo klasi šādā veidā:
ThreadLocalRandom.current().nextX(...)
Kur X ir Int, Long utt.
Piezīme. Nav iespējams nejauši koplietot ThreadLocalRandom ar vairākiem pavedieniem.
Mēs varam ģenerēt jebkura veida datu nejaušu skaitu, piemēram, vesels skaitlis, peldošs, dubults, Būla, garš. Ja plānojat izmantot šo klasi, lai ģenerētu nejaušus skaitļus, veiciet tālāk norādītās darbības.
- Vispirms importējiet klasi, izmantojotjava.util.concurrent.ThreadLocalRandom.
- Izsauciet atbilstošo metodi, kurai vēlaties nejauši ģenerēt skaitļus.
Visas iepriekš minētās metodes ignorē atbilstošo Random klases metodi un atgriež atbilstošo vērtību.
Iepriekš minētās metodes parsē parametru saistīts (augšējais), tam jābūt pozitīvs . Tas atgriež atbilstošu nejauši ģenerētu vērtību no 0 (ieskaitot) līdz norādītajai robežai (izņemot). Tas met IllegalArgumentExcetion ja robeža ir negatīva.
Iepriekš minētās metodes analizē divus parametrus izcelsmi un saistīts . Izcelsme norāda vismazākā vērtība atgriezts, un iesiets norāda augšējā robeža . Tas atgriež atbilstošu nejauši ģenerētu vērtību starp norādīto izcelsmi (ieskaitot) un saistīto (izņemot). Arī metieni IllegalArgumentExcetion ja izcelsme ir lielāka vai vienāda ar saistīto.
Izveidosim programmu, kas ģenerē nejaušus skaitļus, izmantojot ThreadLocalRandom klase .
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. izvads:
Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true
2. izvads:
Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true
Tāpat mēs varam izmantot citas metodes ThreadLocalRandomclass .
Nejaušo skaitļu ģenerēšana Java 8
Programmā Java 8 ir pievienota jauna metode ints(). Izlases klase . Mums ir jāimportējava.util.Randompirms metodes izmantošanas.
ints():
Pseidogadījuma int vērtības tiek ģenerētas tāpat kā nextInt() metodes izsaukšana. Tas atgriež neierobežotu pseidogadījuma int vērtību plūsmu.
ints (garas straumes izmērs):
Metode parsē parametru straumes izmērs tipa garš. Tas norāda ģenerējamo vērtību skaitu. Pseidogadījuma int vērtības tiek ģenerētas tāpat kā nextInt() metodes izsaukšana. Tas arī atgriež nejauši ģenerētu int vērtību straumi. Tas met IllegalArgumentException ja straumes lielums ir mazāks par nulli.
ints(garš straumes izmērs, int nejaušs skaitsIzcelsme, int nejaušsNumberBound):
Parametri:
Tas atgriež pseidogadījuma int vērtību straumi ar norādīto izcelsmi un saiti. Tas met IllegalArgumentException ja:
- stramSize<0< li>
- izcelsme > = saistīts 0<>
ints(int randomNumberOrigin, int randomNumberBound):
Parametri:
Tas atgriež neierobežotu pseidogadījuma int vērtību plūsmu ar norādīto izcelsmi un saiti. Tas met IllegalArgumentException ja izcelsme ir lielāka vai vienāda ar saistīto.
Līdzīgi mēs varam arī ģenerēt garo un dubulto tipu straumi, izmantojot ilgojas () un dubultspēlē () metodi, attiecīgi.
Izveidosim programmu, kas ģenerē veselu skaitļu straumi, izmantojot ints() nejaušās klases metode.
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. izvads:
727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85
2. izvads:
-1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76