Plusieurs chiffres sans doublon [Résolu]

Signaler
Messages postés
10
Date d'inscription
vendredi 8 février 2019
Statut
Membre
Dernière intervention
12 mars 2019
-
Messages postés
7377
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 mai 2021
-
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

2 réponses

Messages postés
7377
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 mai 2021
122
Messages postés
7377
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 mai 2021
122
Tu trouveras un exemple pour ton cas particulier ici:

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

@+ Le Pivert
Messages postés
15923
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
540
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