Što je generator slučajnih brojeva u C #?

Generator slučajnih brojeva ugrađena je knjižnica u C # koja nasumično generira cijele brojeve i brojeve s pomičnom zarezom. Svaki put kada se uputi relevantna metoda knjižnice vraća slučajni broj. Niz slučajnih brojeva je skup brojeva koji ne slijede nijedan obrazac. Generator slučajnih brojeva u C # teži generiranju takve serije kad god se pozove.

Slučajna klasa u C #

  • Pa kako C # generira niz slučajnih brojeva? Odgovor se nalazi unutar klase slučajnih podataka u prostoru s imenima C #.
  • Random class je klasa generatora pseudo-slučajnih brojeva. To znači da je zadatak ove klase da generira niz brojeva koji ne slijede nijedan obrazac. No, je li stroj doista sposoban generirati slučajne brojeve? Kako bi stroj znao koji će broj generirati sljedeće? Uostalom, stroj je dizajniran da slijedi upute i izvršava algoritme.
  • Ne, stroj ne može samostalno generirati slučajne brojeve. Postoji definirani matematički algoritam, koji se temelji na trenutnom satu i stanju stroja, a koji ga vodi za odabir brojeva iz skupa. Svi brojevi u setu imaju jednaku vjerojatnost da budu pokupljeni. Dakle, nisu savršeno slučajni. Oni slijede obrazac. Samo je taj obrazac dovoljno slučajan da udovolji praktičnim ljudskim zahtjevima.

Pseudo i sigurno

Sljedeće pitanje koje vam pada na pamet je zašto ga zovu pseudo-slučajni generator generatora brojeva? Shvatimo to kroz ljudsko ponašanje u stvarnom životu. Kad se od čovjeka traži da odabere slučajnu boju, on pokupi određenu boju. Recimo da je odabrao Žutu. Što ga je navelo da odabere žuto? To bi mogla biti njegova omiljena boja ili boja njegove okoline, ili je tada mogao razmišljati o nečem žutom. Ovo ljudsko ponašanje koje pokreće odluku da se nešto nasumično odabere naziva se sjemenom u svijetu slučajnosti. Sjeme je pokretač ili početna točka slučajnosti.

Sada, kad je sjeme predvidljivo, slučajni brojevi postaju manje slučajni. Oni se tada nazivaju pseudo slučajnim brojevima. Kad su nepredvidivi, nazivaju se sigurno-nasumični brojevi.

C # Random Class koristi trenutni žig kao sjeme, što je vrlo predvidljivo. I otuda, izraz klase pseudo-slučajnih brojeva.

RNGCryptoServiceProvider klasa

Klasa RNGCryptoServiceProvider iz System.Security.Cryptography imenskih prostora može generirati sigurne slučajne brojeve, one koji se mogu koristiti kao lozinke.

Funkcije generatora slučajnih brojeva u C #

Prvo što generirate slučajni broj u C # je inicijalizirati klasu Random. To može učiniti bilo koji od dva konstruktora klase:

  • Random (): Inicijalizira objekt klase Random pomoću vrijednosti sjemena temeljenog na vremenu. Vrijednost sjemena je trenutna vremenska oznaka stroja. Iako je, u kasnijim verzijama, ovo promijenjeno u GUID.
  • Random (Int32): Inicijalizira objekt klase Random pomoću zadane vrijednosti sjemena. Da bismo iz slijeda dobili sljedeći slučajni broj, nazivamo metodu Next () klase Random.
  • Sljedeće (): Vraća ne-negativni pseudo-slučajni Int32 cijeli broj.
  • Dalje (Int32): Vraća ne-negativni pseudo-slučajni Int32 cijeli broj manji od navedenog cijelog broja.
  • Dalje (Int32, Int32): Vraća ne-negativni pseudo-slučajni Int32 cijeli broj unutar navedenog raspona.

Celi generatori slučajnih brojeva u C #

Pogledajmo primjer kako generirati slučajne cijeli brojeve:

Primjer 1

Donji primjer generira slučajne Int32 brojeve.

Kodirati:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next();
)
)

Izlaz:

Primjer 2

Donji primjer generira slučajne Int32 brojeve u rasponu od 0 do 100.

Kodirati:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(100);
)
)

Izlaz:

Primjer 3

Donji primjer generira slučajne Int32 brojeve u rasponu od 50 do 100.

Kodirati:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(50, 100);
)
)

Izlaz:

Generiranje brojeva s pomičnim zarezom

Pogledajmo primjer kako generirati slučajne brojeve s pomičnim zarezom:

Primjer 1

Donji primjer generira slučajne Int32 brojeve.

Kodirati:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static double GenerateRandomInt(Random rnd)
(
return rnd.NextDouble();
)
)

Izlaz:

Vrlo česta pogreška

Najčešća pogreška koju programeri čine tijekom generiranja slučajnih brojeva jest to što za svaki slučajni broj stvaraju novi objekt Random Class. Kao što je prikazano u primjeru u nastavku:

Primjer 1

Kodirati:

using System;
public class Program
(
public static void Main()
(
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt());
)
public static int GenerateRandomInt()
(
Random rnd = new Random(); //a very common mistake
return rnd.Next();
)
)

Izlaz:

Koliko su slučajni brojevi svi isti i zašto se to dogodilo?

Kao što je objašnjeno u radu s Random Class, generirani brojevi temelje se na vrijednosti sjemena i trenutnom stanju stroja. Bilo koja instanca klase Random počinje sa sjemenskom vrijednošću, sprema trenutno stanje i koristi ga za generiranje sljedećeg slučajnog broja. U gornjem kôdu greška je bila stvaranje nove instance klase Random u svakoj iteraciji petlje. Dakle, prije nego što se promijeni interni sat, kod se u potpunosti izvršava, a svaka instanca klase Random trenutačno se primjenjuje s istom vrijednošću sjemena. To rezultira istim nizom brojeva koji se generiraju svaki put.

Zaključak - Generator slučajnih brojeva u C #

U ovom smo članku saznali o generatoru slučajnih brojeva u C # i kako interno djeluje na stvaranje slučajnih brojeva. Također smo kratko naučili koncept pseudo slučajnih i sigurnih slučajnih brojeva. Ove su informacije dovoljne da programeri koriste klasu Random u svojim aplikacijama. Duboko zaronite, ako ste zainteresirani da istražite više o slučajnim brojevima za lozinke i jednokratne lozinke.

Preporučeni članci

Ovo je vodič za Generator slučajnih brojeva u C #. Ovdje ćemo raspravljati o radu generatora slučajnih brojeva, konceptu pseudo slučajnih i sigurnih slučajnih brojeva i uporabi nasumičnih brojeva. Možete i pregledati naše druge povezane članke da biste saznali više -

  1. Matematičke funkcije u C #
  2. Destruktor u C #
  3. Obrnuti broj u Pythonu
  4. Varijable u C #
  5. Varijable u JavaScript-u
  6. Generator slučajnih brojeva u Matlabu
  7. Verzije Tableaua
  8. Generator slučajnih brojeva u JavaScript-u
  9. Generator slučajnih brojeva u PHP-u

Kategorija: