C# Language
Generare numeri casuali in C #
Ricerca…
Sintassi
Casuale()
Casuale (int Seed)
int Successivo ()
int Next (int maxValue)
int Successivo (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 corrente del sistema. |
minValue | I numeri generati non saranno più piccoli di questo valore. Se non impostato, il valore predefinito è 0. |
maxValue | I numeri generati saranno più piccoli di 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 altra corsa.
I semi generati nello stesso tempo potrebbero essere uguali.
Genera un int casuale
Questo esempio genera valori casuali tra 0 e 2147483647.
Random rnd = new Random();
int randomNumber = rnd.Next();
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 int random in un dato range
Genera un numero casuale tra minValue
e maxValue - 1
.
Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);
Generazione della stessa sequenza di numeri casuali più e più volte
Quando si creano istanze Random
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();
}
Produzione:
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 casuali create contemporaneamente avranno lo stesso valore di inizializzazione.
Usando System.Guid.NewGuid().GetHashCode()
può ottenere un seed 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'altra istanza Random
per recuperare i valori seme.
Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());
Ciò consente inoltre di controllare il risultato di tutte le istanze Random
impostando solo il valore di rndSeeds
per rndSeeds
. Tutte le altre istanze saranno derivate deterministicamente dal valore di seme singolo.
Genera un personaggio casuale
Generare una lettera casuale tra a
e z
usando il sovraccarico Next()
per un dato intervallo di numeri, quindi convertire l' int
risultante in 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
Un bisogno comune di numeri casuali per generare un numero che è X%
di qualche valore massimo. questo può essere fatto trattando il risultato di NextDouble()
come 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.