308 votes

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

Comment faire pour produire des nombres aléatoires dans une fourchette ?

482voto

astander Points 83138

Vous pouvez essayer

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

Jetez un coup d'œil à

Classe aléatoire , Méthode Random.Next (Int32, Int32) y Méthode Random.NextDouble

34 votes

Juste pour ajouter une note, si vous utilisez NextDouble() et que vous ne voulez pas que la limite inférieure soit zéro. Vous multipliez par la différence entre la limite supérieure et la limite inférieure, puis vous ajoutez la différence entre la limite inférieure et zéro. Ainsi, pour -1 à 1 double rDouble = (r.NextDouble()*2)-1.0;

3 votes

Ou un générateur de double simplifié dans la plage de -1,0 et 1,0 : Double randDoubleY = new Random().Next(-100, 100) / 100.0D ;

1 votes

Random() utilise une graine dépendant du temps, mais l'écrire explicitement est mieux pour la lisibilité.

60voto

Vishal Kiri Points 1020

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

37voto

ozczecho Points 3575

Quelque chose comme :

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

2 votes

Pour ce qui est DateTime.Now.Millisecond ?

1 votes

Vous devez mettre quelque chose pour qu'il commence avec...... l'objet aléatoire fait simplement beaucoup de calculs sur la valeur que vous donnez, et le fait d'une manière telle que chaque appel de Next() sur le même objet aléatoire aura pour résultat une valeur tout à fait aléatoire par rapport à l'appel précédent. Pour rendre le résultat plus aléatoire à travers différents objets aléatoires vous commencez par un nombre différent -- ici, DateTime.Now.Millisecond. Si vous mettez une constante, plutôt qu'une valeur changeante, vous obtiendrez les mêmes résultats avec .Next().

17 votes

Random est déjà ensemencé avec une valeur système, et Millisecond est uniquement un nombre compris entre 0 et 999. Si cette paire de lignes étaient toujours ensemble dans le code, il n'y aurait que 1000 valeurs possibles de rnd.Next en raison de la remise à zéro de la graine à chaque fois. Même graine à l'entrée, même nombre aléatoire à la sortie. Je laisserais de côté la graine manuelle.

12voto

Kay Points 377

Utilisez :

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

2 votes

Cela ne spécifie pas une gamme.

1 votes

Il suffit de faire valeur_inférieure + r.Next(10) pour obtenir une plage aléatoire.

9voto

Darrelk Points 430

Pour les futurs lecteurs, si vous voulez 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X