Visual Basic .NET Language
au hasard
Recherche…
Introduction
La classe Random est utilisée pour générer des entiers pseudo-aléatoires non négatifs qui ne sont pas vraiment aléatoires, mais pour des besoins généraux suffisamment proches.
La séquence est calculée à l'aide d'un numéro initial (appelé Seed ). Dans les versions antérieures de .net, ce numéro de départ était le même chaque fois qu'une application était exécutée. Donc, ce qui arriverait, c'était que vous obteniez la même séquence de nombres pseudo-aléatoires chaque fois que l'application était exécutée. Maintenant, la graine est basée sur l'heure à laquelle l'objet est déclaré.
Remarques
Enfin, une note sur la randomisation. Comme mentionné précédemment, lorsque vous déclarez une instance de Random
sans aucun paramètre, le constructeur utilisera l'heure actuelle dans le cadre du calcul pour créer le numéro de départ initial. Normalement c'est OK.
Toutefois. Si vous déclarez de nouvelles instances sur un très court laps de temps, chaque fois que le numéro de départ est calculé, l'heure peut être la même. Considérez ce code.
For i As Integer = 1 To 100000
Dim rnd As New Random
x = rnd.Next
Next
Comme les ordinateurs sont très rapides ces jours-ci, l'exécution de ce code prend une fraction de seconde et, sur plusieurs itérations séquentielles de la boucle, l'heure du système n'a pas changé. Ainsi, le numéro de graine ne changera pas et le nombre aléatoire sera le même. Si vous voulez générer beaucoup de nombres aléatoires, déclarez l'instance aléatoire en dehors de la boucle dans cet exemple simple.
Dim rnd As New Random
For i As Integer = 1 To 100000
x = rnd.Next
Next
La règle de base est de ne pas ré-instancier le générateur de nombres aléatoires sur de courtes périodes.
Déclarer une instance
Dim rng As New Random()
Cela déclare une instance de la classe aléatoire appelée rng
. Dans ce cas, l'heure actuelle au point où l'objet est créé est utilisée pour calculer la graine. C'est l'usage le plus courant, mais a ses propres problèmes, comme nous le verrons plus tard dans les remarques.
Au lieu de permettre au programme d'utiliser l'heure actuelle dans le cadre du calcul du numéro de départ initial, vous pouvez spécifier le numéro de départ initial. Cela peut être n'importe quel entier, constante ou variable de 32 bits. Voir ci-dessous pour des exemples. Cela signifie que votre instance va générer la même séquence de nombres pseudo-aléatoires, ce qui peut être utile dans certaines situations.
Dim rng As New Random(43352)
ou
Dim rng As New Random(x)
où x
a été déclaré ailleurs dans votre programme en tant que constante ou variable entière.
Générer un nombre aléatoire à partir d'une instance de aléatoire
L'exemple suivant déclare une nouvelle instance de la classe Random, puis utilise la méthode .Next
pour générer le nombre suivant dans la séquence de nombres pseudo-aléatoires.
Dim rnd As New Random
Dim x As Integer
x = rnd.Next
La dernière ligne ci-dessus générera le numéro pseudo-aléatoire suivant et l'assignera à x
. Ce nombre sera compris entre 0 et 2147483647. Cependant, vous pouvez également spécifier la plage de nombres à générer, comme dans l'exemple ci-dessous.
x = rnd.Next(15, 200)
Veuillez noter toutefois qu'en utilisant ces paramètres, la plage de numéros sera comprise entre 15 ou plus et 199 ou moins.
Vous pouvez également générer des nombres à virgule flottante du type Double en utilisant .NextDouble
par exemple
Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()
Vous ne pouvez toutefois pas spécifier une plage pour cela. Il sera toujours compris entre 0,0 et moins de 1,0.