[VB.NET 2005] - Problème avec ce code...

NezEnMoins Messages postés 100 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 9 mai 2008 - 20 déc. 2005 à 12:35
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 - 20 déc. 2005 à 13:55
Bonjour à tous!
Le logiciel que je suis en train de développer est un logiciel de gestion de concours de belote. Lors de la première manche, les équipes sont tirées au sort. Il y a nbEquipes inscrites au tournoi, nbEquipes est obligatoirement un nombre pair.
Je suis sous VB 2005 et j'ai un problème dans ce code :


Dim equNum As Integer = 0
Dim equNum1 As Integer = 0
Dim equNum2 As Integer = 0
Dim nbEquipesTMP As Integer = nbEquipes
Dim TabEquipes(nbEquipes) As Integer
Dim nI As Integer = 0
Dim nJ As Integer = 0
Dim nK As Integer = 0


For nI = 0 To nbEquipes - 1
TabEquipes(nI) = nI + 1
Next


For nI = 1 To nbEquipes / 2
For nJ = 1 To 2
equNum = TabEquipes(Int((Rnd() * nbEquipesTMP)) + 1)

For nK = equNum To nbEquipesTMP - 1
TabEquipes(nK) = TabEquipes(nK + 1)
nbEquipesTMP -= 1

If nJ = 1 Then
equNum1 = equNum
Else
equNum2 = equNum
End If

Next nK

Next nJ
frmConcours.lstConfront.Items.Add("e" & equNum1 & " vs e" & equNum2)
Next nI



Avec ce code, cela me tire plusieurs fois une même équipe ce qui n'est pas bon!
Exemple de résultat pour nbEquipes = 8 :
e6 - e8
e7 - e5
e1 - e1
e1 - e2

Si quelqu'un pouvais m'aider ça serait super !!!
Merci d'avance et bonne journée

1 réponse

cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
20 déc. 2005 à 13:55
Salut,

Comme je cherche pas trop à comprendre ton algo, je te propose un truc un peu différent.
Tu crée une ArrayList à partir de ton tableau d'équipe (comme ça, ça marche toujours si tu utilise une classe équipe plutôt qu'un tableau d'entier).

dim arlEqipes as ArrayList = new ArrayList()
For iCptEquipe = 1 To nbEquipes
arlEqipes.Add(iCptEquipe)
Next

Ensuite, on utilise le même principe de tirage au sort mais on supprime de la liste les éléments déjà tirés.

dim iIndice as Integer
For nbPaire = 1 To nbEquipes / 2
iIndice = Math.Round(Rnd() * (arlEqipes.Count-1))
equ1 = arlEqipes(iIndice)
arlEqipes.RemoveAt(iIndice)

iIndice = Math.Round(Rnd() * (arlEqipes.Count-1))

equ2 = arlEqipes(iIndice)
arlEqipes.RemoveAt(iIndice)

frmConcours.lstConfront.Items.Add("e" & equNum1 & " vs e" & equNum2)
Next

Attention, j'ai pas testé le code. C'est pour l'algo plus qu'autre chose.

Chris

N'oubliez pas de cloturer votre post.
0
Rejoignez-nous