glenat_26
Messages postés10Date d'inscriptionvendredi 8 février 2019StatutMembreDernière intervention12 mars 2019
-
8 févr. 2019 à 16:15
cs_Le Pivert
Messages postés7893Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention19 mai 2023
-
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
Whismeril
Messages postés18417Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 5 juin 2023624 Modifié le 8 févr. 2019 à 17:34
Bonjour
merci de poster dans le forum VB.Net, d'ailleurs c'est un bug que tu aies pu poster dans le forum mère.
à l'avenir pour poster un code, merci de lire et d'appliquer ce qui est décrit dans le lien suivant https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code nous sommes bénévoles, et certains d'entre nous (moi le premier) apprécions que le demandeur fasse un effort et sommes plus enclin à répondre
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
9 févr. 2019 à 12:04
https://codes-sources.commentcamarche.net/forum/affich-10066528-tirage-aleatoire#p10094343
@+ Le Pivert