logo

Jak wygenerować liczbę losową w Javie

W Jawa programowania, często tego wymagaliśmy generować liczby losowe podczas gdy my tworzymy aplikacje. Wiele aplikacji ma tę funkcję generuj liczby losowo , takie jak weryfikacja użytkownika, z której korzysta wiele aplikacji OTP . Najlepszym przykładem liczb losowych są kości. Ponieważ gdy go rzucimy, otrzymamy losową liczbę od 1 do 6.

W tej części dowiemy się, czym jest a Liczba losowa I jak wygenerować liczby losowe w Jawa .

Liczba losowa

Liczby losowe to liczby, które wykorzystują duży zestaw liczb i wybierają liczbę za pomocą algorytmu matematycznego. Spełnia dwa następujące warunki:

algorytm k-nn
  • Wygenerowane wartości są równomiernie rozłożone w określonym przedziale.
  • Nie da się odgadnąć przyszłej wartości na podstawie wartości bieżących i przeszłych.

Generowanie liczby losowej w Javie

W Javie istnieją trzy sposoby generowania liczb losowych przy użyciu metody i klas.

  • Używając losowy() metoda
  • Używając losowy Klasa
  • Używając WątekLokalnyLosowy Klasa
  • Używając int() Metoda (w Javie 8)

Korzystanie z metody Math.random().

Jawa Matematyka klasa ma wiele metod dla różnych operacji matematycznych. Jednym z nich jest losowy() metoda. To jest statyczny Metoda klasy Math. Możemy wywołać go bezpośrednio. Generuje jedynie podwójnie wpisz losową liczbę większy lub równy 0,0 I mniej niż 1,0 . Przed użyciem metody random() musimy zaimportować plikjava.lang.Mathklasa.

Składnia:

 public static double random() 

Nie akceptuje żadnego parametru. Zwraca pseudolosową liczbę podwójną, która jest większa lub równa 0,0 i mniejsza niż 1,0.

Stwórzmy program generujący liczby losowe za pomocą metody random().

LosowyNumberPrzykład1.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()); } } 

Wyjście:

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

Pamiętać: Za każdym razem, gdy wykonujemy program, otrzymujemy inny wynik. Wynik może różnić się od wyniku pokazanego powyżej.

Możemy również skorzystać z poniższego wzoru, jeśli chcemy wygenerować liczbę losową z określonego zakresu.

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

W powyższym wzorze wartość minimalna jest inkluzywna, a wartość maksymalna ma charakter wyłączny.

Stwórzmy program, który generuje liczby losowe od 200 do 400.

LosowyNumberPrzykład2.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); } } 

Wyjście 1:

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

Wyjście 2:

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

Korzystanie z klasy losowej

Innym sposobem wygenerowania liczby losowej jest użycie Jawa losowy klasa zJava.utilpakiet. Generuje strumień liczb pseudolosowych. Możemy wygenerować liczbę losową dowolnego typu danych, np. integer, float, double, Boolean, long. Jeśli zamierzasz używać tej klasy do generowania liczb losowych, wykonaj poniższe kroki:

  • Najpierw zaimportuj klasęjava.lang.Losowe.
  • Stworzyć obiekt klasy Random.
  • Wywołaj dowolną z następujących metod:
  • nextInt(int związany) następnyInt() następnyFloat() następnyDouble() następnyDługi() następnyBoolean()

Wszystkie powyższe metody zwracają następną pseudolosową wartość o rozkładzie jednorodnym (odpowiednia metoda) z sekwencji tego generatora liczb losowych. The następnyDouble() I następnyFloat() Metoda generuje losową wartość z zakresu od 0,0 do 1,0.

The nextInt(int związany) Metoda akceptuje ograniczony parametr (górny), który musi być dodatni. Generuje liczbę losową z zakresu od 0 do granicy-1.

Stwórzmy program generujący liczby losowe za pomocą klasy Random.

LosowyNumberPrzykład3.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); } } 

Wyjście:

 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 

Korzystanie z klasy ThreadLocalRandom

The WątekLokalnyLosowy klasa jest zdefiniowana wjava.util.concurrentpakiet. Jest inicjowany za pomocą wewnętrznie wygenerowanego materiału siewnego, takiego samego jak generator losowy klasy Math. Nie można go modyfikować. Możemy użyć tej klasy w następujący sposób:

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

Gdzie X to Int, Long itp.

Uwaga: Nie jest możliwe przypadkowe udostępnienie ThreadLocalRandom wielu wątkom.

Możemy wygenerować liczbę losową dowolnego typu danych, np. integer, float, double, Boolean, long. Jeśli zamierzasz używać tej klasy do generowania liczb losowych, wykonaj poniższe kroki:

  • Najpierw zaimportuj klasę, używającjava.util.concurrent.ThreadLocalRandom.
  • Wywołaj odpowiednią metodę, dla której chcesz losowo wygenerować liczby.
  • następnyInt() następnyDouble() następnyDługi() następnyFloat() następnyBoolean()

Wszystkie powyższe metody zastępują odpowiednią metodę klasy Random i zwracają odpowiednią wartość.

    nextInt(int związany) nextDouble (intbound) nextLong(intbound)

Powyższe metody analizują parametr zobowiązany (górny) tak musi być pozytywny . Zwraca odpowiednią, losowo wygenerowaną wartość z zakresu od 0 (włącznie) do określonej granicy (wyłącznie). Rzuca Wyjątek IllegalArgument jeśli granica jest ujemna.

    nextInt(int początek, int powiązanie) nextDouble(int początek, int powiązanie) nextLong(int początek, int powiązanie)

Powyższe metody analizują dwa parametry pochodzenie I zobowiązany . Pochodzenie określa najmniejsza wartość zwrócone, a powiązanie określa Górna granica . Zwraca odpowiednią, losowo wygenerowaną wartość pomiędzy określonym pochodzeniem (włącznie) a powiązaniem (wyłącznie). Oraz rzuty Wyjątek IllegalArgument jeśli początek jest większy lub równy ograniczonemu.

Stwórzmy program, który generuje liczby losowe za pomocą Klasa ThreadLocalRandom .

LosowyNumberPrzykład4.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); } } 

Wyjście 1:

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

Wyjście 2:

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

Podobnie możemy zastosować inne metody Klasa ThreadLocalRandom .

Generowanie liczb losowych w Javie 8

W Javie 8 dodano nową metodę ints(). Przypadkowa klasa . Musimy zaimportowaćjava.util.Losoweprzed użyciem metody.

int():

Pseudolosowe wartości int są generowane w taki sam sposób, jak wywołanie metody nextInt(). Zwraca nieograniczony strumień pseudolosowych wartości typu int.

int(długi rozmiar strumienia):

Metoda analizuje parametr Rozmiar strumienia typu długie. Określa liczbę wartości, które mają zostać wygenerowane. Pseudolosowe wartości int są generowane w taki sam sposób, jak wywołanie metody nextInt(). Zwraca również strumień losowo wygenerowanych wartości int. Rzuca Wyjątek IllegalArgument jeśli rozmiar strumienia jest mniejszy od zera.

ints(długi strumieńRozmiar, int randomNumberOrigin, int randomNumberBound):

Parametry:

    Rozmiar strumienia:Liczba wartości do wygenerowania.losowyNumerPochodzenie:Pochodzenie każdej wartości losowejlosowyNumberBound:Powiązany z każdą losową wartością

Zwraca strumień pseudolosowych wartości int o określonym pochodzeniu i granicy. Rzuca Wyjątek IllegalArgument Jeśli:

  • Rozmiar strumienia<0< li>
  • pochodzenie > = związane
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametry:

losowyNumerPochodzenie:Pochodzenie każdej wartości losowejlosowyNumberBound:Powiązany z każdą losową wartością

Zwraca nieograniczony strumień pseudolosowych wartości int z określonym pochodzeniem i powiązaniem. Rzuca Wyjątek IllegalArgument jeśli początek jest większy lub równy ograniczonemu.

Podobnie możemy również wygenerować strumień typów długich i podwójnych, używając metody spodnie długie() I debel() metodę, odpowiednio.

Stwórzmy program, który generuje strumień liczb całkowitych za pomocą int() metoda klasy Random.

lis lub wilk

LosowyNumberPrzykład5.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); } } 

Wyjście 1:

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

Wyjście 2:

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