Plusieurs chiffres sans doublon [Résolu]

Messages postés
3
Date d'inscription
vendredi 8 février 2019
Dernière intervention
8 février 2019
- - Dernière réponse : cs_Le Pivert
Messages postés
5791
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 février 2019
- 9 févr. 2019 à 12:04
Je voudrais savoir comment sortir des chiffres aléatoire sans doublon dans environ 5 ou plus textbox.
J'ai essayer comme sa, mais cela ne fonctionne pas.

Dim q As Integer

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

TextBox1.Text = Int(20 * Rnd())
TextBox2.Text = Int(20 * Rnd())
TextBox3.Text = Int(20 * Rnd())
TextBox4.Text = Int(20 * Rnd())
TextBox5.Text = Int(20 * Rnd())
TextBox6.Text = Int(20 * Rnd())

q = q + 1
End Sub

Afficher la suite 

Votre réponse

2 réponses

Messages postés
5791
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 février 2019
79
0
Merci
Bonjour,

Voir ici plusieurs méthodes:

https://codes-sources.commentcamarche.net/source/101523-tirage-aleatoire

cs_Le Pivert
Messages postés
5791
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 février 2019
79 -
Tu trouveras un exemple pour ton cas particulier ici:

https://codes-sources.commentcamarche.net/forum/affich-10066528-tirage-aleatoire#p10094343

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
12714
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 février 2019
331
0
Merci
Bonjour

ton problème maintenant.
Tu ne veux pas de doublons, or tu génères n nombres aléatoires sans plus de restriction, donc la probabilité d'avoir des doublons est forte (1 chance sur 20 dans ton cas).

Ce qu'il est possible de faire:
  • créer une collection de résultats (une List(Of ) par exemple)
  • générer un aléatoire et le stocker dans la collection
  • générer un autre aléatoire est vérifier qu'il n'est pas dans la liste, s'il y est => nouvelle génération, s'il n'y est pas, on le stocke dans la liste
  • générer un autre aléatoire est vérifier qu'il n'est pas dans la liste, s'il y est => nouvelle génération, s'il n'y est pas, on le stocke dans la liste
  • etc


le problème de cette méthode est que si on veut faire un tirage avec une grande partie (ou tous) les possibles, ça va être long.
Par exemple, si tu dois distribuer un jeu de 54 cartes, à la 54° tu auras une chance sur 54 de trouver la carte qui n'est pas dans la liste et 53 sur 54 de générer une carte déjà tirée. Donc tu tombes à coté, et tu recommences, avec exactement les mêmes probabilités.
Ça peut durer un moment.

Une méthode qui fonctionne facilement et rapidement est de créer la collection de tous les possibles, de la mélanger et de prendre les n premiers résultats.

    Dim tirage As List(Of Integer) = Enumerable.Range(0, 20).OrderBy(Function(x) Guid.NewGuid()).ToList()
    Dim res1 As Integer = tirage(0)
    Dim res2 As Integer = tirage(1)


Enumerable.Range(0, 20)
va générer une suite de 20 entiers qui commence par 0.
OrderBy(Function(x) 
va trier la collection en entrée en fonction d'un critère, en général le critère dépend d'une ou plusieurs propriété de la collection d'entrée. Par exemple des personnes peuvent être triées sur leurs noms, leurs âges, leurs tailles etc....

Dans notre cas on va trier sur un truc aléatoire
Guid.NewGuid()
un Guid est encore plus aléatoire que la fonction Random, il génère un Hash Code.

Età la fin on en fait une liste
.ToList()




Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.