IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Boucle infinie


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut Boucle infinie
    Bonsoir,

    A l'approche de Noël, avec un petit groupe d'amis on a eu l'idée d'organiser une soirée où chacun devait offrir un cadeau à une autre personne du groupe. Cela s'est déroulé de manière classique, à la courte paille ; mais désireux d'utiliser mes faibles connaissances en informatique, je m'étais dit "pourquoi pas créer un programme java pour ça ? Ca peut être marrant !"
    Alors j'ai pris mon courage à deux mains et j'ai tenté de m'y mettre.
    Avant de vous montrer mon problème, voilà l'idée que j'avais :
    1) Créer un ArrayList d'objets Perso (où Perso a trois variables String : nom/mail/gift). L'idée est que le nom est celui qui offre le cadeau, mail son adresse mail, et gift la personne qui reçoit le cadeau.
    2) Créer un deuxième ArrayList de String, qui va reprendre tous les noms, les mélanger, pour après assigner un "gift" à chaque Perso.

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    /**
     * @author : pamp.
     */
     
    import java.util.ArrayList ;
    import java.util.Collections ;
    public class TestRandom
    {
        private static ArrayList<Perso> p = new ArrayList<Perso>() ;
        private static ArrayList<String> l = new ArrayList<String>() ;
        private static Perso p_1 = new Perso("Nom1", "mail", null) ;
        private static Perso p_2 = new Perso("Nom2", "mail2", null) ;
        private static Perso p_3 = new Perso("Nom3", "mail3", null) ; 
        private static Perso p_4 = new Perso("Nom4", "mail4", null) ;
        private static Perso p_5 = new Perso("Nom5", "mail5", null) ; 
        private static Perso p_6 = new Perso("Nom6", "mail6", null) ;
     
        public static void main(String[] args)
        {
            // On ajoute les personnes du tirage au premier ArrayList.
            p.add(p_1) ; p.add(p_2) ; p.add(p_3) ; p.add(p_4) ; p.add(p_5) ; p.add(p_6) ;
     
            // On crée une autre liste (de String) comportant tous les noms.
            // Elle servira, après avoir été mélangée, à lié chaque personne avec la personne à qui offrir le cadeau.
            for (int i = 0 ; i < p.size() ; i++)
            {
                l.add( ((Perso) p.get(i)).getNom());
            }
     
            // On mélange la liste créée précédemment via la méthode shuffle(ArrayList).
            shuffle(l) ;
     
            //On met chaque nom obtenu dans le tableau l (personnes recevant le cadeau) dans les objets Perso
            // contenus dans le tableau p.
            for (int j = 0 ; j < p.size() ; j++)
            {
                ( (Perso) p.get(j) ).setGift(l.get(j)) ;
            }
     
        }
     
       // Méthode de tri aléatoire (sans redondance).
       public static ArrayList shuffle(ArrayList<String> l)
       {
           int err = l.size();
           while (err != 0)
           {
               for (int i = 0 ; i < l.size() ; i++)
               {
                    if ( ((Perso) p.get(i)).getNom() != (l.get(i)) )
                    {
                        err-- ;
                    }
                    else
                    {
                        err = l.size() ;
                        Collections.shuffle(l) ;
                    }
               }
           }
           return l ;
       }
    }
    En ajoutant un System.out.print pour voir ce qu'ont les différents Perso dans leur variable gift respective, j'aimerais vérifier que tout le monde a bien une personne à qui offrir un cadeau, sans que ce soit eux-mêmes ^^

    Mais voilà le problème (oui, fini l'introduction interminable !) :
    Parfois, BlueJ fait fonctionner le programme sans problème, quasiment instantanément, mais parfois, il met des heures (je ne sais pas exactement combien de temps, je l'arrête toujours après 15/20 minutes :p )

    En espérant avoir votre aide, autant au niveau de mon problème de temps, mais également si vous avez des idées pour "épurer" mon programme

    Ryce.


    PS : Après avoir fini mon message, je me suis rendu compte que je ne l'ai pas mis dans la bonne section... Si une bonne âme pouvait me dire comment le changer de section, ou si un modérateur passe par là

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    J'ai du mal à comprendre la logique de ta méthode shuffle :/

    Tu peux expliquer ton raisonnement?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut
    Alors voilà,
    la méthode shuffle() de Collections va mélanger de manière aléatoire l'arraylist.
    Ma méthode, elle, tente de faire en sorte que la méthode shuffle mélange de manière aléatoire sans qu'un seul objet de l'arraylist soit à la même place qu'au départ.
    Cette petite modification permettra d'éviter qu'une personne doive offrir un cadeau... à soi-même :p

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut
    J'ai résolu mon problème en fait

    Il s'agissait bel et bien d'un problème de boucle en fait !
    L'ajout d'un petit "break" dans la boucle else a résolu complètement le problème

    Je ferme le poste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo