Hva er Random Number Generator i C #?

En tilfeldig tallgenerator er et innebygd bibliotek i C # som genererer heltall og flyttallstall tilfeldig. Hver gang bibliotekets relevante metode påberopes, returnerer det et tilfeldig tall. En serie tilfeldige tall er et sett med tall som ikke følger noe mønster. Den tilfeldige tallgeneratoren i C # har en tendens til å generere en slik serie når det påberopes.

Tilfeldig klasse i C #

  • Så, hvordan genererer C # en serie tilfeldige tall? Svaret ligger innenfor tilfeldig klasse i C # System-navneområdet.
  • Tilfeldig klasse er en pseudo-tilfeldig tallgenerator-klasse. Dette betyr at denne klassen får i oppgave å generere en serie med tall som ikke følger noe mønster. Men er en maskin virkelig i stand til å generere tilfeldige tall? Hvordan ville maskinen vite hvilket nummer som skal genereres neste? Tross alt er maskinen designet for å følge instruksjoner og utføre algoritmer.
  • Nei, maskinen kan ikke generere tilfeldige tall på egen hånd. Det er en definert matematisk algoritme, basert på gjeldende klokke og tilstand på maskinen, som guider den til å velge tall fra et sett. Alle tallene i settet har lik sannsynlighet for å bli plukket opp. Dermed er de ikke helt tilfeldige. De følger et mønster. Det er bare at mønsteret er tilstrekkelig tilfeldig til å oppfylle de praktiske menneskelige kravene.

Pseudo og sikker

Det neste spørsmålet som kommer til tankene er hvorfor kaller de det pseudo-tilfeldig tallgenerator-klasse? La oss forstå dette gjennom menneskelig atferd. Når et menneske blir bedt om å velge en tilfeldig farge, plukker han opp en viss farge. La oss si at han valgte Yellow. Hva fikk ham til å plukke gult? Det kan være favorittfargen hans eller fargen i omgivelsene, eller han kunne ha tenkt på noe gult den gangen. Denne menneskelige oppførselen som driver beslutningen om å velge noe tilfeldig, kalles frøet i en verden av tilfeldighet. Frøet er utløseren eller startpunktet for tilfeldigheten.

Når frøet er forutsigbart, blir tilfeldige tall mindre tilfeldige. De kalles da pseudo-tilfeldige tall. Når de er uforutsigbare, kalles de sikre tilfeldige tall.

C # Tilfeldig klasse bruker gjeldende tidsstempel som frø, noe som er veldig forutsigbart. Og derav begrepet pseudo-random number generator class.

RNGCryptoServiceProvider Class

RNGCryptoServiceProvider-klassen fra System.Security.Cryptography-navneområdet er i stand til å generere sikre tilfeldige tall, som kan brukes som passord.

Tilfeldige nummergeneratorfunksjoner i C #

Den første tingen å generere et tilfeldig tall i C # er å initialisere Random-klassen. Dette kan gjøres av en av de to konstruktørene i klassen:

  • Tilfeldig (): Initierer et objekt fra tilfeldig klasse ved å bruke en tidsbasert frøverdi. Frøverdien er gjeldende tidsstempel for maskinen. Selv om dette i senere versjoner ble endret til å være GUID-basert.
  • Tilfeldig (Int32): Initierer et objekt i tilfeldig klasse ved å bruke den angitte frøverdien . For å få det neste tilfeldige tallet fra serien, kaller vi Neste () -metoden i tilfeldig klasse.
  • Neste (): Returnerer et ikke-negativt pseudo-tilfeldig Int32-heltall.
  • Neste (Int32): Returnerer et ikke-negativt pseudo-tilfeldig Int32-heltall mindre enn det spesifiserte heltallet.
  • Neste (Int32, Int32): Returnerer et ikke-negativt pseudo-tilfeldig Int32-heltall innenfor det spesifiserte området.

Tilfeldige tallgenerator-tall i C #

La oss se et eksempel på hvordan du genererer tilfeldige heltall:

Eksempel 1

Eksemplet nedenfor genererer tilfeldige Int32-tall.

Kode:

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

Produksjon:

Eksempel 2

Eksemplet nedenfor genererer tilfeldige Int32-tall i området 0 til 100.

Kode:

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

Produksjon:

Eksempel 3

Eksemplet nedenfor genererer tilfeldige Int32-tall i området 50 til 100.

Kode:

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

Produksjon:

Genererer flytende punktnumre

La oss se et eksempel på hvordan du genererer tilfeldige flytende tall:

Eksempel 1

Eksemplet nedenfor genererer tilfeldige Int32-tall.

Kode:

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

Produksjon:

Et veldig vanlig feil

Den vanligste feilen utviklerne begår mens de genererer tilfeldige tall, er at for hvert tilfeldig tall oppretter de et nytt objekt av tilfeldig klasse. Som illustrert i eksemplet nedenfor:

Eksempel 1

Kode:

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

Produksjon:

Hvor tilfeldige tall er de samme, og hvorfor skjedde dette?

Som forklart i bruken av tilfeldig klasse, er tallene som genereres, basert på frøverdien og maskinens nåværende tilstand. Enhver forekomst av tilfeldig klasse starter med frøverdien, lagrer gjeldende tilstand og bruker den til å generere det neste tilfeldige tallet. I koden over var feilen å opprette en ny forekomst av tilfeldig klasse i hver iterasjon av løkken. Så før klokkeslettet i den interne klokken endres, blir koden fullstendig utført, og hver forekomst av tilfeldig klasse blir oppstartet med samme frøverdi. Dette resulterer i det samme settet med tall som genereres hver gang.

Konklusjon - Tilfeldig antall generator i C #

I denne artikkelen lærte vi om tilfeldig tallgeneratoren i C # og hvordan den internt fungerer for å generere tilfeldige tall. Vi lærte også kort begrepet pseudo-tilfeldige og sikre tilfeldige tall. Denne informasjonen er tilstrekkelig for at utviklere kan bruke Random-klassen i sine applikasjoner. Dypdykk, hvis du er interessert i å utforske mer om tilfeldige tall for passord og engangspassord.

Anbefalte artikler

Dette er en guide til Random Number Generator i C #. Her diskuterer vi hvordan Random Number Generator fungerer, begrepet pseudo-tilfeldige og sikre-random tilfeller og bruken av Random Number. Du kan også gå gjennom andre relaterte artikler for å lære mer -

  1. Matematiske funksjoner i C #
  2. Destructor i C #
  3. Omvendt nummer i Python
  4. Variabler i C #
  5. Variabler i JavaScript
  6. Tilfeldig nummergenerator i Matlab
  7. Tableau-versjoner
  8. Tilfeldig nummergenerator i JavaScript
  9. Tilfeldig nummergenerator i PHP