Πώς να δημιουργήσετε τυχαίους αριθμούς σε C#

Οι τυχαίοι αριθμοί χρησιμοποιούνται ευρέως στα ψηφιακά παιχνίδια, στη στατιστική δειγματοληψία, στην κρυπτογραφία, στους υπολογισμούς στη στατιστική φυσική, στην αριθμητική ανάλυση, στις ραδιοεπικοινωνίες και στα παιχνίδια καζίνο όπως η ρουλέτα κ.λπ

Μπορούμε να χρησιμοποιήσουμε την κλάση Random για να δημιουργήσουμε τυχαίους αριθμούς στη C#.

Τι είναι η κλάση C# Random

C# Random κλάση είναι μια γεννήτρια ψευδοτυχαίων αριθμών, η οποία είναι ένας αλγόριθμος που παράγει μια ακολουθία αριθμών που πληρούν ορισμένες στατιστικές απαιτήσεις τυχαιότητας.

Η κλάση αυτή έχει 5 μεθόδους Next(), NextInt64(),NextBytes(), NextDouble() και NextSingle()

Ανάλογα με τον τύπο του αριθμού δηλαδή, int,long κ.λπ. μπορούμε να χρησιμοποιήσουμε την αντίστοιχη μέθοδο.

Ας δούμε τα παραδείγματα για να τα κατανοήσουμε καλύτερα

Δημιουργία τυχαίου ακέραιου αριθμού σε C#

Βήματα για τη δημιουργία τυχαίου ακέραιου αριθμού σε C#

  1. Ενσωματώστε την κλάση τυχαίων αριθμών.
  2. Χρησιμοποιήστε τη μέθοδο Random.Next() για να επιστρέψετε έναν τυχαίο ακέραιο μεταξύ Int32.MinValue και Int32.MaxValue.

var randomInteger = new Random();

randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next(); 


/* OUTPUT : 
2027076668
1095111085
535874255
1973884472
430547700
*/

Δημιουργία τυχαίου ακέραιου αριθμού μεταξύ ελάχιστης και μέγιστης τιμής

Random.Next() έχει μια υπερφορτωμένη μέθοδο, η οποία δέχεται ως παραμέτρους τις ελάχιστες και μέγιστες τιμές και παράγει έναν τυχαίο ακέραιο μεταξύ των συγκεκριμένων τιμών.

Για να δημιουργήσετε τυχαίους αριθμούς μεταξύ 100 και 1000 χρησιμοποιήστε τον παρακάτω κώδικα

Console.WriteLine("Five random integers between 100 and 1000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", randomNumber.Next(100, 1000));

/* OUTPUT:
Five random integers between 100 and 1000
904
853
554
290
614
*/

Δημιουργία τυχαίου μεγάλου αριθμού(Int64) σε C#

Για να δημιουργήσετε τυχαίο μακρύ αριθμό δηλ. Int64 σε C#, χρησιμοποιήστε τη μέθοδο Random.NextInt64() η οποία επιστρέφει τυχαίο αριθμό Int64 μεταξύ Int64.MinValue και Int64.MaxValue.


var RandomInt64 = new Random();

RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64(); 


/* OUTPUT : 
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/

Δημιουργία τυχαίου μεγάλου αριθμού (Int64) στο δεδομένο εύρος

Παρόμοια με την Random.Next(), η Random.NextInt64() έχει μια υπερφορτωμένη μέθοδο, η οποία δέχεται Range, δηλαδή ελάχιστη και μέγιστη τιμή ως παραμέτρους, η οποία επιστρέφει έναν τυχαίο αριθμό Int64 μεταξύ αυτών.

Για να δημιουργήσετε τυχαίους αριθμούς μεταξύ 100000 και 200000 χρησιμοποιήστε τον παρακάτω κώδικα


var RandomInt64 = new Random();


Console.WriteLine("Five random integers between 100000 and 200000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", RandomInt64.NextInt64(100000, 200000));

/* OUTPUT:
Five random long Int64 numbers between 100000 and 200000
144220
194475
185075
159433
136542
*/

Οι παραγόμενοι τυχαίοι αριθμοί δεν είναι εντελώς τυχαίοι επειδή χρησιμοποιείται ένας μαθηματικός αλγόριθμος για την επιλογή τους, αλλά είναι αρκετά καλοί για τις περισσότερες περιπτώσεις του πραγματικού κόσμου.

Αποφυγή διπλοτύπων κατά τη δημιουργία τυχαίων αριθμών

Εάν αρχικοποιείτε περισσότερες από μία κλάσεις new Random()

Μπορεί να λάβετε διπλούς τυχαίους αριθμούς. (Πολυνηματική εφαρμογή)

var randomOne = new Random();
var randomTwo = new Random(); // Don't do this

Επομένως, είναι προτιμότερο να αρχικοποιήσετε μόνο ένα παράδειγμα της κλάσης Random() και να το χρησιμοποιήσετε σε όλη την εφαρμογή.

//Function to generate unique random number using `Random()` class

private static readonly Random randomInstance = new Random();

public static int GenerateRandomNumber(int min, int max)
{
    lock(randomInstance) // synchronize
    {
        return randomInstance.Next(min, max);
    }
}

Αν θέλετε να δημιουργήσετε σειρές τυχαίων αριθμών, σε περιβάλλον με πολλά νήματα, χρησιμοποιήστε την παραπάνω μέθοδο.

Χρήση κρυπτογραφικών C# RandomNumberGenerator

Αν θέλετε να δημιουργήσετε πραγματικά μοναδικούς τυχαίους αριθμούς, μπορείτε να χρησιμοποιήσετε την κλάση RandomNumberGenerator που αποτελεί μέρος της βιβλιοθήκης System.Security.Cryptography.

Αυτή η κλάση παράγει έναν κρυπτογραφικά ασφαλή τυχαίο αριθμό και είναι κατάλληλη για τη δημιουργία ενός τυχαίου κωδικού πρόσβασης.

var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);

Μπορούμε επίσης να περάσουμε εύρος στη μέθοδο RandomNumberGenerator.

var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);

Χρήση της κλάσης C# RNGCryptoServiceProvider

Αυτή η κλάση είναι πλέον παρωχημένη, μην χρησιμοποιείτε αυτή τη μέθοδο.

RNGCryptoServiceProvider υλοποιεί μια κρυπτογραφική γεννήτρια τυχαίων αριθμών (RNG) χρησιμοποιώντας την υλοποίηση που παρέχεται από τον πάροχο υπηρεσιών κρυπτογράφησης (CSP).

Χρησιμοποιήστε τον παρακάτω κώδικα για να δημιουργήσετε έναν τυχαίο αριθμό με την κλάση C# RNGCryptoServiceProvider.

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
   byte[] randomNumber = new byte[4];//4 for int32
   rng.GetBytes(randomNumber);
   int value = BitConverter.ToInt32(randomNumber, 0);
}

Περίληψη

Σε αυτό το σεμινάριο μάθαμε διάφορους τρόπους για τη δημιουργία τυχαίων αριθμών στη C# με απλά παραδείγματα.