Produire un nombre aléatoire dans une plage en utilisant C #

267

Comment puis-je produire des nombres aléatoires dans une plage?

RoR
la source

Réponses:

419

Tu peux essayer

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

Jettes un coup d'oeil à

Classe aléatoire , méthode Random.Next (Int32, Int32) et méthode Random.NextDouble

Adriaan Stander
la source
30
Juste pour ajouter une note, si vous utilisez NextDouble () et que vous ne voulez pas que la borne inférieure soit nulle. Vous multipliez par la différence entre la borne supérieure et la borne inférieure, puis ajoutez la différence entre la borne inférieure et zéro. Donc pour -1 à 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard
2
Ou un générateur double simplifié dans la gamme de -1.0 et 1.0: Double randDoubleY = new Random (). Next (-100, 100) / 100.0D;
BoiseBaked
1
Random()utilise une graine dépendante du temps, mais l'écrire explicitement est préférable pour la lisibilité.
Evgeni Sergeev
44

Essayez le code ci-dessous.

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
Vishal Kiri
la source
34

Quelque chose comme:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
ozczecho
la source
2
car c'est quoi DateTime.Now.Millisecond?
Hille
1
Vous devez mettre quelque chose pour commencer ...... l'objet Random fait simplement beaucoup de calculs sur la valeur que vous donnez, et cela de manière à ce que chaque appel de Next () sur le même objet Random résulte dans une valeur assez aléatoire à l'appel précédent. Pour rendre le résultat plus aléatoire sur différents objets Random , vous commencez avec un nombre différent - ici, le DateTime.Now.Millisecond. Si vous mettez une constante, plutôt qu'une valeur changeante, vous obtiendrez les mêmes résultats de .Next ().
Mike M
12
Randomest déjà prédéfini avec une valeur système et Millisecondn'est qu'un nombre compris entre 0 et 999. Si cette paire de lignes était toujours ensemble dans le code, il n'y aurait que 1000 valeurs possibles en rnd.Nextraison de la réinitialisation de l'amorce à chaque fois. Même graine entrée, même nombre aléatoire sorti. Je laisserais de côté la graine manuelle.
John McDonald
@JohnMcDonald, vous avez raison. Pour être précis, il est initialisé avec Environment.TickCount.
Parag Meshram
11

Utilisation:

Random r = new Random();
 int x= r.Next(10);//Max range
Kay
la source
2
Cela ne spécifie pas de plage.
Ailier Sendon le
1
Vous faites juste lower_value + r.Next (10) pour obtenir une plage aléatoire.
Austin Salgat
6

Pour les futurs lecteurs, si vous souhaitez un nombre aléatoire dans une plage, utilisez le code suivant:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

C # Double aléatoire entre min et max

Exemple de code

Darrelk
la source
2
La formule doit être de la manière suivante:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià
3

Voici la version mise à jour de la réponse de Darrelk . Il est implémenté à l'aide de méthodes d'extension C # . Il n'alloue pas de mémoire ( nouveau Random () ) chaque fois que cette méthode est appelée.

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

Utilisation (assurez-vous d'importer l'espace de noms qui contient 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);
Konstantin Gindemit
la source