Generazione di numeri casuali in C#

Generazione di numeri casuali in C#

# Genera un int casuale

Questo esempio genera valori casuali compresi tra 0 e 2147483647.

Random rnd = new Random();
int randomNumber = rnd.Next();

# Genera un int casuale in un dato intervallo

Genera un numero casuale tra minValue e maxValue - 1 .

Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);

# Generare la stessa sequenza di numeri casuali più e più volte

Durante la creazione di Random istanze con lo stesso seme, verranno generati gli stessi numeri.

int seed = 5;
for (int i = 0; i < 2; i++)
{
   Console.WriteLine("Random instance " + i);
   Random rnd = new Random(seed);
   for (int j = 0; j < 5; j++)
   {
      Console.Write(rnd.Next());
      Console.Write(" ");
   }

   Console.WriteLine();
}

Uscita:

Random instance 0
726643700 610783965 564707973 1342984399 995276750
Random instance 1
726643700 610783965 564707973 1342984399 995276750

# Crea più classi casuali con semi diversi contemporaneamente

Due classi Random create contemporaneamente avranno lo stesso valore seed.

Usando System.Guid.NewGuid().GetHashCode() può ottenere un seme diverso anche nello stesso tempo.

Random rnd1 = new Random();
Random rnd2 = new Random();
Console.WriteLine("First 5 random number in rnd1");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd1.Next());

Console.WriteLine("First 5 random number in rnd2");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd2.Next());

rnd1 = new Random(Guid.NewGuid().GetHashCode());
rnd2 = new Random(Guid.NewGuid().GetHashCode());
Console.WriteLine("First 5 random number in rnd1 using Guid");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2 using Guid");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd2.Next());

Un altro modo per ottenere semi diversi è usare un altro Random istanza per recuperare i valori seed.

Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());

Questo permette anche di controllare il risultato di tutti i Random istanze impostando solo il valore seed per il rndSeeds . Tutte le altre istanze verranno derivate deterministicamente da quel singolo valore seed.

# Genera un doppio casuale

Genera un numero casuale compreso tra 0 e 1,0. (escluso 1.0)

Random rnd = new Random();
var randomDouble = rnd.NextDouble();

# Genera un carattere casuale

Genera una lettera casuale tra a e z utilizzando il Next() sovraccarico per un dato intervallo di numeri, quindi convertire il risultante int a un char

Random rnd = new Random();
char randomChar = (char)rnd.Next('a','z'); 
//'a' and 'z' are interpreted as ints for parameters for Next()

# Genera un numero che è una percentuale di un valore massimo

Una necessità comune di numeri casuali è generare un numero che sia X% di un certo valore massimo. questo può essere fatto trattando il risultato di NextDouble() in percentuale:

var rnd = new Random();
var maxValue = 5000;
var percentage = rnd.NextDouble();
var result = maxValue * percentage; 
//suppose NextDouble() returns .65, result will hold 65% of 5000: 3250.

# Sintassi

  • Casuale()
  • Casuale(int Seme)
  • int Next()
  • int Next(int maxValue)
  • int Next(int minValue, int maxValue)
  • # parametri

    Parametri Dettagli
    Seme Un valore per la generazione di numeri casuali. Se non è impostato, il valore predefinito è determinato dall'ora di sistema corrente.
    Valore min I numeri generati non saranno inferiori a questo valore. Se non è impostato, il valore predefinito è 0.
    Valore massimo I numeri generati saranno inferiori a questo valore. Se non è impostato, il valore predefinito è Int32.MaxValue .
    valore di ritorno Restituisce un numero con valore casuale.

    # Osservazioni

    Il seme casuale generato dal sistema non è lo stesso in ogni diversa esecuzione.

    I semi generati nello stesso tempo potrebbero essere gli stessi.