Mikä on satunnaislukugeneraattori C #: ssä?

Satunnaislukugeneraattori on sisäänrakennettu kirjasto C #: ssä, joka tuottaa kokonaislukuja ja liukulukuja satunnaisesti. Aina kun kirjaston asiaankuuluvaa menetelmää käytetään, se palauttaa satunnaisluvun. Satunnaislukujen sarja on numerojoukko, joka ei seuraa mitään mallia. C #: n satunnaislukugeneraattorilla on taipumus generoida tällainen sarja aina, kun sitä kutsutaan.

Satunnainen luokka C: ssä

  • Joten miten C # tuottaa satunnaislukujen sarjan? Vastaus on C # -järjestelmän nimitilan Random Class -luokassa.
  • Satunnaisluokka on pseudo-satunnainen numerogeneraattoriluokka. Tämä tarkoittaa, että tämän luokan tehtävänä on tuottaa numerosarja, joka ei seuraa mitään mallia. Mutta onko kone todella kykenevä tuottamaan satunnaislukuja? Kuinka kone tietäisi, mikä numero seuraavaksi luodaan? Loppujen lopuksi kone on suunniteltu noudattamaan ohjeita ja suorittamaan algoritmeja.
  • Ei, kone ei voi luoda satunnaislukuja yksinään. On olemassa määritelty matemaattinen algoritmi, joka perustuu koneen nykyiseen kelloon ja tilaan, joka ohjaa sitä valitsemaan numeroita joukosta. Kaikilla sarjan numeroilla on yhtä suuri todennäköisyys, että ne noudetaan. Ne eivät siis ole täysin satunnaisia. He seuraavat mallia. Se on vain, että malli on riittävän satunnainen vastaamaan käytännön inhimillisiä vaatimuksia.

Pseudo ja turvallinen

Seuraava mieleen tuleva kysymys on, miksi he kutsuvat sitä pseudo-satunnaislukugeneraattoriluokka? Ymmärtäkäämme tämä ihmisten tosielämän käyttäytymisen kautta. Kun ihmistä pyydetään valitsemaan satunnainen väri, hän valitsee tietyn värin. Oletetaan, että hän valitsi keltaisen. Mikä sai hänet valitsemaan keltaisen? Se voi olla hänen suosikki väri tai ympäristön väri, tai hän olisi voinut ajatella jotain keltaista tuolloin. Tätä ihmisen käyttäytymistä, joka johtaa päätökseen valita jotain satunnaisesti, kutsutaan siemeneksi satunnaisuuden maailmassa. Siemen on satunnaisuuden avaus tai lähtökohta.

Nyt kun siemen on ennustettavissa, satunnaislukuista tulee vähemmän satunnaisia. Niitä kutsutaan sitten pseudo-satunnaislukuiksi. Kun niitä ei voida ennustaa, niitä kutsutaan turva-satunnaislukuiksi.

C # Random Class käyttää siemenenä nykyistä aikaleimaa, mikä on hyvin ennustettavissa. Ja siten termi pseudo-satunnaislukugeneraattoriluokka.

RNGCryptoServiceProvider-luokka

RNGCryptoServiceProvider-luokka System.Security.Cryptography-nimitilasta pystyy tuottamaan suojattuja satunnaislukuja, joita voidaan käyttää salasanoina.

Satunnaislukugeneraattorin toiminnot C #: ssä

Ensimmäinen asia, kun luodaan satunnaisluku C #: ssa, on alustaa Random-luokka. Tämän voi tehdä mikä tahansa luokan kahdesta rakentajasta:

  • Random (): Alustaa Random-luokan objektin aikapohjaisella siemenarvolla. Siemenarvo on koneen nykyinen aikaleima. Vaikka myöhemmissä versioissa tämä muutettiin GUID-pohjaiseksi.
  • Satunnainen (Int32): Alustaa satunnaisluokan objektin määritettyä siemenarvoa käyttämällä. Seuraavan satunnaisluvun saamiseksi sarjasta kutsutaan Random-luokan Next () -menetelmää.
  • Seuraava (): Palauttaa ei-negatiivisen pseudo-satunnaisen Int32-kokonaisluvun.
  • Seuraava (Int32): Palauttaa ei-negatiivisen näennäissatunnaisen Int32-kokonaisluvun, joka on pienempi kuin määritetty kokonaisluku.
  • Seuraava (Int32, Int32): Palauttaa ei-negatiivisen pseudo-satunnaisen Int32-kokonaisluvun määritellyllä alueella.

Satunnaislukugeneraattorin kokonaisluvut C #: ssä

Katsokaamme esimerkki satunnaislukujen luomisesta:

Esimerkki # 1

Alla oleva esimerkki tuottaa satunnaiset Int32-numerot.

Koodi:

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

lähtö:

Esimerkki 2

Alla oleva esimerkki generoi satunnaiset Int32-numerot välillä 0 - 100.

Koodi:

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

lähtö:

Esimerkki 3

Alla oleva esimerkki generoi satunnaiset Int32-numerot alueella 50 - 100.

Koodi:

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

lähtö:

Liukuvien pisteiden numeroiden luominen

Katsokaamme esimerkki satunnaisten liukulukujen luomisesta:

Esimerkki # 1

Alla oleva esimerkki tuottaa satunnaiset Int32-numerot.

Koodi:

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

lähtö:

Hyvin yleinen virhe

Yleisimmät virhekehittäjät tekevät satunnaislukuja generoidessaan, että jokaiselle satunnaislukulle ne luovat uuden satunnaisluokan objektin. Kuten alla olevassa esimerkissä havainnollistetaan:

Esimerkki # 1

Koodi:

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

lähtö:

Kuinka satunnaisluvut ovat kaikki samoja ja miksi näin tapahtui?

Kuten Random Class -työryhmän työssä selitettiin, luodut luvut perustuvat siemenarvoon ja koneen nykytilaan. Mikä tahansa satunnaisluokan esiintymä alkaa siemenarvolla, tallentaa nykyisen tilan ja käyttää sitä seuraavan satunnaisluvun luomiseen. Yllä olevassa koodissa virhe oli luoda uusi satunnaisluokan esiintymä silmukan jokaisessa iteraatiossa. Joten, ennen kuin sisäisen kellon aika muuttuu, koodi suoritetaan kokonaan, ja jokainen Random-luokan esiintymys välitetään samalla siemenarvolla. Tämä johtaa samaan numerojoukkoon, joka luodaan joka kerta.

Johtopäätös - satunnaislukugeneraattori C: ssä

Tässä artikkelissa opimme C #: n satunnaislukugeneraattorista ja kuinka se toimii sisäisesti satunnaislukujen generoimiseksi. Oppimme myös lyhyesti näennäissatunnaisten ja turvallisten satunnaislukujen käsitteen. Nämä tiedot ovat riittäviä, jotta kehittäjät voivat käyttää Random-luokkaa sovelluksissaan. Syvä sukellus, jos haluat kiinnostaa lisätietoja satunnaislukuista salasanoille ja kertaluonteisille salasanoille.

Suositellut artikkelit

Tämä on opas C #: n satunnaislukugeneraattoriin. Tässä keskustellaan siitä, miten satunnaislukugeneraattori toimii, pseudo-satunnaisten ja turvallisten-satunnaislukujen käsite ja satunnaislukujen käyttö. Voit myös käydä läpi muiden aiheeseen liittyvien artikkeleidemme saadaksesi lisätietoja -

  1. Matematiikan toiminnot C #: ssä
  2. Tuhoaja C #: ssä
  3. Käänteinen numero Pythonissa
  4. Muuttujat C #: ssä
  5. Muuttujat JavaScript
  6. Satunnaislukugeneraattori Matlabissa
  7. Tableau -versiot
  8. Satunnaislukugeneraattori JavaScript
  9. Satunnaislukugeneraattori PHP: ssä