Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de géneration d'entier sans doublon.

    17 janvier 2018 à 22:09:21

    Bonjour,

    Dans le cadre de l'exercice du cours pour la programmation en C#, je dois faire un système de loterie.

    Actuellement j'ai "à moitié" réussi  car 1 soucis se pose.

    Je ne trouve pas le moyen d'éviter les doublons avec le code suivant :

            static void lotto()
            {
                int[] tirageLotto = new int[7];
                int valeur = DateTime.Now.Millisecond;
                Random alea = new Random(valeur);
                int nombreAlea = 0;
    
                for (int i = 1; i < tirageLotto.Length; i++)
                {
                    nombreAlea = alea.Next(1, 50);
                    Console.WriteLine(nombreAlea);
                }
    

    Je suis débutant et j'ai 2-3 soucis de logique si je peut dire ca comme ca, donc excusez moi d'avance si enfaite le solution était toute bête.

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2018 à 22:19:32

      2 solutions, celle demandé par le tuto dispo ici, à chaque tirage tu fais une méthode qui parcourt ton tableau et tu vérifies s'il est pas déjà dedans, et s'il y est tu recommences.

      Sinon une meilleure solution, serait de partir d'une liste contenant toutes les valeurs autorisées, et d'en choisir au pif, en les supprimant de la liste (comme ça pas possible de tirer 2 fois le même)

      • Partager sur Facebook
      • Partager sur Twitter
      Censément, quelqu'un de sensé est censé s'exprimer sensément.
        18 janvier 2018 à 0:10:09

        Salut, j'ai essayé d'appliquer ce que tu m'a dis mais je bloque à la fin ( et la fatigue m'aide pas vraiment ) sur quoi écrire pour recommencer.

                  int[] tirageLotto = new int[7];
                    int valeur = DateTime.Now.Millisecond;
                    Random alea = new Random(valeur);
                    int nombreAlea = 0;
        
                    for (int i = 1; i < tirageLotto.Length; i++)
                    {
                        nombreAlea = alea.Next(1, 50);
                        Console.WriteLine(nombreAlea);
        
                        foreach (int parc in tirageLotto)
                        {
                            if (parc != tirageLotto[i])
                            {
                                continue;
                            }
                            else
                            {
                                // inconnu
                            }
                        }
                    }

        Merci.

        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2018 à 0:31:58

          si j ai bien compris le code je ferai une truc comme sa

          int[] tirageLotto = new int[7];
            int valeur = DateTime.Now.Millisecond;
            Random alea = new Random(valeur);
            int nombreAlea = 0;
           
            for (int i = 1; i < tirageLotto.Length; i++)
            {
                nombreAlea = alea.Next(1, 50);
                
           
                foreach (int parc in tirageLotto)
                {
                    if (parc != tirageLotto[i])
                    {
                        Console.WriteLine(nombreAlea);
                    }
                    else
                    {
                        // ici refaire le randam
                    }
                }
            }



          • Partager sur Facebook
          • Partager sur Twitter
            18 janvier 2018 à 0:37:27

            En pseudo-code

            à faire "taille du tableau" fois
              choisir un nombre au hasard
              le mettre à la "place active" du tableau
            
              à faire pour chaque élément déjà présent avant dans le tableau
                si cet élément est identique au nombre tiré alors
                  rester sur la même "place active" (autrement dit ne pas avancer dans le tableau, voire note)
                  quitter cette boucle
                fin
              fin
            fin
            
            Note: si on reste sur la même place active, au tour suivant
            la ligne "mettre dans le tableau" écrasera la valeur (doublon) précédente



            -
            Edité par Sehnsucht 18 janvier 2018 à 0:40:13

            • Partager sur Facebook
            • Partager sur Twitter
            Censément, quelqu'un de sensé est censé s'exprimer sensément.

            Problème de géneration d'entier sans doublon.

            × 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