Ce este generatorul de număr aleatoriu în C #?

Un generator de numere aleatorii este o bibliotecă încorporată în C # care generează numere întregi și numere cu punct flotant la întâmplare. De fiecare dată când este invocată metoda relevantă a bibliotecii, returnează un număr aleatoriu. O serie de numere aleatorii este un set de numere care nu respectă niciun model. Generatorul de numere aleatoare din C # tinde să genereze o astfel de serie de fiecare dată când este invocat.

Clasa aleatoare în C #

  • Deci, cum generează C # o serie de numere aleatorii? Răspunsul se află în clasa aleatoare a spațiului de nume al sistemului C #.
  • Clasa aleatorie este o clasă generatoare de numere pseudo-aleatorii. Aceasta înseamnă că această clasă are sarcina de a genera o serie de numere care nu respectă niciun tipar. Dar este o mașină capabilă să genereze numere aleatorii? Cum ar ști utilajul ce număr va genera în continuare? La urma urmei, mașina este proiectată să urmeze instrucțiunile și să execute algoritmi.
  • Nu, aparatul nu poate genera numere aleatorii de unul singur. Există un algoritm matematic definit, bazat pe ceasul curent și starea aparatului, care îl ghidează pentru a alege numerele dintr-un set. Toate numerele din set au o probabilitate egală de a fi ridicate. Astfel, nu sunt perfect aleatorii. Urmează un model. Doar că modelul este suficient de aleatoriu pentru a satisface cerințele umane practice.

Pseudo și Securitate

Următoarea întrebare care vine în minte este de ce o numesc clasa generatoare de numere pseudo-aleatoare? Să înțelegem acest lucru prin comportamentul uman din viața reală. Atunci când unei ființe umane i se cere să selecteze o culoare aleatorie, el ia o anumită culoare. Să zicem că l-a ales pe Galben. Ce l-a determinat să ceară galben? Ar putea fi culoarea lui preferată sau culoarea împrejurimilor sale sau ar fi putut să se gândească la ceva galben la vremea respectivă. Acest comportament uman care conduce decizia de a alege ceva la întâmplare se numește Sămânța în lumea aleatoriei. Semința este declanșatorul sau punctul de plecare al întâmplării aleatorii.

Acum, când semințele sunt previzibile, numerele aleatorii devin mai puțin întâmplătoare. Acestea sunt numite apoi numere pseudo-aleatorii. Când sunt imprevizibile, ele sunt numite numere sigure-aleatoare.

Clasa C # Random folosește ora actuală ca semință, ceea ce este foarte previzibil. Și, prin urmare, termenul clasei generatoare de numere pseudo-aleatorii.

RNGCryptoServiceProvider Class

Clasa RNGCryptoServiceProvider din spațiul de nume System.Security.Cryptography este capabil să genereze numere aleatorii sigure, care pot fi utilizate ca parole.

Funcțiile generatorului de număr aleatoriu în C #

Primul lucru pentru a genera un număr aleatoriu în C # este inițializarea clasei Random. Acest lucru poate fi realizat de oricare dintre cei doi constructori ai clasei:

  • Random (): inițializează un obiect al clasei Random folosind o valoare semințială bazată pe timp. Valoarea seminței este momentul actual al mașinii. Deși, în versiunile ulterioare, aceasta a fost schimbată pentru a fi bazată pe GUID.
  • Random (Int32): inițializează un obiect din clasa Random folosind valoarea specificată. Pentru a obține următorul număr aleatoriu din serie, apelăm la metoda Next () a clasei Random.
  • Următorul (): Returnează un număr întreg Int32 pseudo-aleatoriu non-negativ.
  • Următorul (Int32): returnează un număr întreg int32 pseudo-aleatoriu non-negativ decât numărul întreg specificat.
  • Următorul (Int32, Int32): returnează un număr întreg Int32 pseudo-aleator non-negativ în intervalul specificat.

Numere întregi ale generatorului de numere în C #

Haideți să vedem un exemplu despre cum să generați numere întregi aleatorii:

Exemplul # 1

Exemplul de mai jos generează numere Int32 aleatorii.

Cod:

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

ieşire:

Exemplul # 2

Exemplul de mai jos generează numere Int32 aleatorii în intervalul 0 până la 100.

Cod:

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

ieşire:

Exemplul # 3

Exemplul de mai jos generează numere Int32 aleatorii în intervalul 50 până la 100.

Cod:

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

ieşire:

Generarea de numere cu punct flotant

Haideți să vedem un exemplu despre cum să generați numere aleatorii în virgule flotant:

Exemplul # 1

Exemplul de mai jos generează numere Int32 aleatorii.

Cod:

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

ieşire:

O greșeală foarte comună

Cea mai comună greșeală pe care dezvoltatorii o comit în timp ce generează numere aleatorii este aceea că, pentru fiecare număr aleator, creează un nou obiect al clasei aleatorii. După cum este ilustrat în exemplul de mai jos:

Exemplul # 1

Cod:

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

ieşire:

Cum numerele aleatorii sunt la fel și de ce s-a întâmplat asta?

Așa cum s-a explicat în funcționarea clasei aleatorii, numerele generate se bazează pe valoarea seminței și starea curentă a mașinii. Orice instanță a clasei aleatorii începe cu valoarea semințelor, salvează starea curentă și o folosește pentru a genera următorul număr aleatoriu. În codul de mai sus, greșeala a fost crearea unei noi instanțe a clasei Random în fiecare iterație a buclei. Deci, înainte de a se schimba ora din ceasul intern, codul este complet executat și fiecare instanță a clasei Random este instanțiată cu aceeași valoare de semință. Aceasta rezultă în același set de numere generate de fiecare dată.

Concluzie - Generator de număr aleatoriu în C #

În acest articol, am aflat despre generatorul de numere aleatoare din C # și cum funcționează intern pentru a genera numere aleatorii. De asemenea, am învățat pe scurt conceptul de numere pseudo-aleatoare și sigur-aleatoare. Aceste informații sunt suficiente pentru ca dezvoltatorii să folosească clasa Random în aplicațiile lor. Scufundare profundă, dacă vă interesează să explorați mai multe numere aleatorii pentru parole și parole unice.

Articole recomandate

Acesta este un ghid pentru generatorul de numere aleatoare din C #. Aici discutăm cum funcționează Random Number Generator, conceptul de numere pseudo-aleatorii și random-random și utilizarea Random Number. Puteți parcurge și alte articole conexe pentru a afla mai multe -

  1. Funcții matematice în C #
  2. Distrugător în C #
  3. Numărul invers în Python
  4. Variabile în C #
  5. Variabile în JavaScript
  6. Generator de număr aleatoriu în Matlab
  7. Versiuni în tabel
  8. Generator de număr aleatoriu în JavaScript
  9. Generator de număr aleatoriu în PHP