Produrre un numero casuale in un intervallo usando C #


267

Come faccio a produrre numeri casuali all'interno di un intervallo?

Risposte:


419

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


30
Solo per aggiungere una nota, se si utilizza NextDouble () e non si desidera che il limite inferiore sia zero. Si moltiplica per la differenza tra il limite superiore e il limite inferiore, quindi si aggiunge la differenza tra il limite inferiore e zero. Quindi per -1 a 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard,

2
Oppure un doppio generatore semplificato nell'intervallo -1.0 e 1.0: Double randDoubleY = new Random (). Next (-100, 100) / 100.0D;
BoiseBaked,

1
Random()usa un seme dipendente dal tempo, ma scriverlo esplicitamente è meglio per la leggibilità.
Evgeni Sergeev

44

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

34

Qualcosa di simile a:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
per cosa è DateTime.Now.Millisecond?
Hille,

1
Devi mettere qualcosa perché inizi ... l'oggetto Casuale fa semplicemente molta matematica sul valore che dai, e lo fa in modo tale che ogni chiamata di Next () sullo stesso oggetto Casuale risulti in un valore abbastanza casuale rispetto alla chiamata precedente. Per rendere il risultato più casuale tra diversi oggetti Casuali , si inizia con un numero diverso: qui DateTime.Now.Millisecond. Se si inserisce una costante, anziché un valore che cambia, si otterrebbero gli stessi risultati da .Next ().
Mike M,

12
Randomha 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.Nextdovuti al reset del seed ogni volta. Stesso seme dentro, stesso numero casuale fuori. Lascerei fuori il seme manuale.
John McDonald,

@JohnMcDonald, hai ragione. Per essere precisi, viene inizializzato con Environment.TickCount.
Parag Meshram,

11

Uso:

Random r = new Random();
 int x= r.Next(10);//Max range

2
Questo non specifica un intervallo.
Winger Sendon,

1
Basta fare lower_value + r.Next (10) per ottenere un intervallo casuale.
Austin Salgat,

6

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

C # Doppio casuale tra min e max

Esempio di codice


2
La formula dovrebbe essere nel modo seguente:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià,


3

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.