Risposte:
Puoi provare
Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles
Dai un'occhiata a
Classe casuale , metodo Random.Next (Int32, Int32) e metodo Random.NextDouble
Random()
usa un seme dipendente dal tempo, ma scriverlo esplicitamente è meglio per la leggibilità.
Prova sotto il codice.
Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51
Qualcosa di simile a:
var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
DateTime.Now.Millisecond
?
Random
ha già un seeding con un valore di sistema ed Millisecond
è solo un numero compreso tra 0 e 999. Se questa coppia di righe fosse sempre unita nel codice, ci sarebbero solo 1000 possibili valori rnd.Next
dovuti al reset del seed ogni volta. Stesso seme dentro, stesso numero casuale fuori. Lascerei fuori il seme manuale.
Environment.TickCount
.
Uso:
Random r = new Random();
int x= r.Next(10);//Max range
Per i lettori futuri se si desidera un numero casuale in un intervallo, utilizzare il seguente codice:
public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
A parte la classe casuale , che genera numeri interi e doppi, considera:
Stack Overflow question Generazione di (pseudo) valori vincolati casuali di (U) Int64 e Decimal
Ecco la versione aggiornata dalla risposta di Darrelk . È implementato usando metodi di estensione C # . Non alloca memoria ( new Random () ) ogni volta che viene chiamato questo metodo.
public static class RandomExtensionMethods
{
public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
{
return random.NextDouble() * (maxNumber - minNumber) + minNumber;
}
}
Utilizzo (assicurarsi di importare lo spazio dei nomi che contiene la classe RandomExtensionMethods):
var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
double rDouble = (r.NextDouble()*2)-1.0;