Wat is Random Number Generator in C #?

Een random number generator is een ingebouwde bibliotheek in C # die willekeurige getallen en floating-point getallen genereert. Telkens wanneer de relevante methode van de bibliotheek wordt aangeroepen, retourneert deze een willekeurig getal. Een reeks willekeurige getallen is een set getallen die geen enkel patroon volgen. De willekeurige getallengenerator in C # heeft de neiging een dergelijke reeks te genereren wanneer deze wordt aangeroepen.

Willekeurige klasse in C #

  • Dus, hoe genereert C # een reeks willekeurige getallen? Het antwoord ligt in de Random Class van de C # System-naamruimte.
  • Willekeurige klasse is een pseudo-willekeurige nummergeneratorklasse. Dit betekent dat deze klasse de taak heeft om een ​​reeks getallen te genereren die geen enkel patroon volgen. Maar is een machine echt in staat willekeurige getallen te genereren? Hoe weet de machine welk nummer vervolgens moet worden gegenereerd? De machine is immers ontworpen om instructies te volgen en algoritmen uit te voeren.
  • Nee, de machine kan zelf geen willekeurige getallen genereren. Er is een gedefinieerd wiskundig algoritme, gebaseerd op de huidige klok en de status van de machine, die het helpt om getallen uit een set te kiezen. Alle nummers in de set hebben een gelijke kans om te worden opgenomen. Ze zijn dus niet perfect willekeurig. Ze volgen wel een patroon. Het is alleen dat het patroon voldoende willekeurig is om aan de praktische menselijke eisen te voldoen.

Pseudo en veilig

De volgende vraag die in je opkomt, is waarom noemen ze het pseudo-random number generator class? Laten we dit begrijpen door echt menselijk gedrag. Wanneer een mens wordt gevraagd om een ​​willekeurige kleur te selecteren, pakt hij een bepaalde kleur op. Laten we zeggen dat hij Geel heeft gekozen. Wat deed hem geel kiezen? Het kan zijn favoriete kleur of de kleur van zijn omgeving zijn, of hij had destijds aan iets geel kunnen denken. Dit menselijke gedrag dat de beslissing drijft om iets willekeurig te kiezen, wordt het zaad in de wereld van willekeur genoemd. Het zaad is de trigger of het beginpunt van de willekeur.

Wanneer het zaad voorspelbaar is, worden de willekeurige getallen minder willekeurig. Ze worden dan pseudo-willekeurige getallen genoemd. Wanneer ze onvoorspelbaar zijn, worden ze veilig-willekeurige getallen genoemd.

C # Random Class gebruikt de huidige tijdstempel als het zaad, dat zeer voorspelbaar is. En daarom de term pseudo-willekeurige getallengeneratorklasse.

RNGCryptoServiceProvider Class

De RNGCryptoServiceProvider Class van de System.Security.Cryptography-naamruimte kan veilige willekeurige getallen genereren, die kunnen worden gebruikt als wachtwoord.

Functies voor het genereren van willekeurige getallen in C #

Het eerste dat een willekeurig getal in C # genereert, is de klasse Random te initialiseren. Dit kan worden gedaan door een van de twee constructors van de klasse:

  • Random (): initialiseert een object van de klasse Random met een tijdgebaseerde seed-waarde. De seed-waarde is de huidige tijdstempel van de machine. Hoewel dit in latere versies op GUID was gebaseerd.
  • Random (Int32): initialiseert een object van de klasse Random met de opgegeven seed-waarde. Om het volgende willekeurige nummer uit de reeks te krijgen, roepen we de methode Next () van de klasse Random aan.
  • Next (): Retourneert een niet-negatief pseudo-willekeurig Int32-geheel getal.
  • Volgende (Int32): Retourneert een niet-negatief pseudo-willekeurig Int32 geheel getal kleiner dan het opgegeven gehele getal.
  • Volgende (Int32, Int32): Retourneert een niet-negatief pseudo-willekeurig Int32-geheel getal binnen het opgegeven bereik.

Gehele getallen voor het genereren van willekeurige getallen in C #

Laten we een voorbeeld bekijken van het genereren van willekeurige gehele getallen:

Voorbeeld 1

Het onderstaande voorbeeld genereert willekeurige Int32-nummers.

Code:

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

Output:

Voorbeeld 2

Het onderstaande voorbeeld genereert willekeurige Int32-nummers in het bereik van 0 tot 100.

Code:

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

Output:

Voorbeeld 3

Het onderstaande voorbeeld genereert willekeurige Int32-nummers in het bereik van 50 tot 100.

Code:

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

Output:

Drijvende-komma-nummers genereren

Laten we een voorbeeld bekijken van het genereren van willekeurige getallen met drijvende komma:

Voorbeeld 1

Het onderstaande voorbeeld genereert willekeurige Int32-nummers.

Code:

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

Output:

Een veel voorkomende fout

De meest voorkomende foutontwikkelaars begaan bij het genereren van willekeurige getallen is dat ze voor elk willekeurig getal een nieuw object van willekeurige klasse maken. Zoals geïllustreerd in het onderstaande voorbeeld:

Voorbeeld 1

Code:

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

Output:

Hoe willekeurige nummers allemaal hetzelfde zijn en waarom is dit gebeurd?

Zoals uitgelegd in de werking van Random Class, zijn de gegenereerde nummers gebaseerd op de seed-waarde en de huidige status van de machine. Elke instantie van de klasse Random begint met de seed-waarde, slaat de huidige status op en gebruikt deze om het volgende willekeurige getal te genereren. In de bovenstaande code was de fout om een ​​nieuwe instantie van de klasse Random te maken in elke iteratie van de lus. Dus voordat de tijd in de interne klok verandert, wordt de code volledig uitgevoerd en wordt elke instantie van de klasse Random geïnstantieerd met dezelfde seed-waarde. Dit resulteert in dezelfde reeks getallen die elke keer worden gegenereerd.

Conclusie - Random Number Generator in C #

In dit artikel hebben we geleerd over de generator van willekeurige getallen in C # en hoe deze intern werkt om willekeurige getallen te genereren. We hebben ook kort het concept van pseudo-willekeurige en veilig-willekeurige getallen geleerd. Deze informatie is voldoende voor ontwikkelaars om de Random-klasse in hun applicaties te gebruiken. Diepe duik, indien geïnteresseerd om meer te ontdekken over willekeurige getallen voor wachtwoorden en eenmalige wachtwoorden.

Aanbevolen artikelen

Dit is een gids voor Random Number Generator in C #. Hier bespreken we hoe Random Number Generator werkt, het concept van pseudo-willekeurige en veilig-willekeurige nummers en het gebruik van Random Number. U kunt ook onze andere gerelateerde artikelen doornemen voor meer informatie -

  1. Wiskundige functies in C #
  2. Destructor in C #
  3. Omgekeerd nummer in Python
  4. Variabelen in C #
  5. Variabelen in JavaScript
  6. Willekeurige nummergenerator in Matlab
  7. Versies van het tableau
  8. Willekeurige nummergenerator in JavaScript
  9. Random Number Generator in PHP