Partage
  • Partager sur Facebook
  • Partager sur Twitter

VB construire un tableau sans doublons

Sujet résolu
    27 octobre 2011 à 12:38:15

    J'aimerai faire 30 fois : tirer un nombre au sort jusqu'à ce qu'il ne soit pas dans la liste, et le rajouter à la liste.
    Pour cela j'ai un code qui marche mais j'aimerai le simplifier :
    Randomize() 
    n = (Int((30*Rnd())+1)) 
    tab(0) = n 
    Do 
    n = (Int((30*Rnd())+1)) 
    loop until n <> tab(0) 
    tab(1) = n
    Do 
    n = (Int((30*Rnd())+1)) 
    loop until n <> tab(0) and n <> tab(1) 
    tab(2) = n
    .
    .
    .
    Do 
    n = (Int((30*Rnd())+1)) 
    loop until n <> tab(0) and n <> tab(1) and n <> tab(2) ... and n <> tab(28) 
    tab(30) = n
    

    Avez-vous des idées?
    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2011 à 15:13:59

      Bonjour,

      Un petit coup d'oeil par ici devrait pouvoir aider ;)

      Si jamais ça ne va vraiment pas, voilà un exemple (à n'utiliser qu'après avoir compris son fonctionnement)
      o_O Es-tu sûr d'avoir suffisamment cherché par toi même avant de regarder une réponse toute faite ?
      Function Shuffle(ByVal start As Int32, ByVal finish As Int32) As Int32()
          If start > finish Then Return Shuffle(finish, start)
      
          Dim values As Int32() = Enumerable.Range(start, finish - start + 1).ToArray
          Dim rnd As New Random()
      
          For i As Int32 = 0 To values.Length - 1
              Dim swap As Int32 = rnd.Next(i + 1)
              If i <> swap Then
                  Dim tmp As Int32 = values(i)
                  values(i) = values(swap)
                  values(swap) = tmp
              End If
          Next
      
          Return values
      End Function
      


      Cordialement !
      • Partager sur Facebook
      • Partager sur Twitter
      Censément, quelqu'un de sensé est censé s'exprimer sensément.
        27 octobre 2011 à 17:16:23

        Merci, c'est gentil, mais j'ai rien compris lol
        • Partager sur Facebook
        • Partager sur Twitter
          29 octobre 2011 à 19:42:49

          Beaucoup plus facile à faire:
          Donc tu souhaites ajouter 30 nombre aléatoire dans une liste et qu'ils soient tous différents et tirés au hasard?

          Voici un petit exemple:
          Une ListBox
          Un Button
          Public Class Form1
              Dim rdm As New Random()
              Dim nbr As Integer
          
              Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
                  Dim cpt As Integer = 0
                  While cpt < 30
                      nbr = rdm.Next(50)
                      If (Not ListBox1.Items.Contains(nbr)) Then
                          ListBox1.Items.Add(nbr)
                          cpt = cpt + 1
                      End If
                  End While
              End Sub
          

          Quand tu clic sur le bouton, il va prendre tourner tant que le compteur n'aura pas 30 nombre(on peut encore modifier ça légèrement encore,le cpt est la pour faire joli) entre 0 et 50(que j'ai mis dans le rdm.Next() comme valeur max).
          • Partager sur Facebook
          • Partager sur Twitter
            9 novembre 2011 à 10:23:34

            Merci c'est gentil mais j'avais besoin d'un tableau. Toutefois, j'ai fini par trouver une solution.
            • Partager sur Facebook
            • Partager sur Twitter

            VB construire un tableau sans doublons

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown