Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Programmation Avancée

Modérateur : Douin

GANKAMA
Messages : 64
Inscription : 26 oct. 2017 16:51

Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Message par GANKAMA » 29 nov. 2018 14:35

Bonjour,

Je bloque au niveau du visiteur sans doublon.Je m'explique, j'ai une TreeSet<String> en variable d'instance et voila ma méthode public Boolean visite(GroupeDeContributeurs g){
boolean res = false;
Iterator<Cotisant> it=g.getChildren().iterator();
res=listeCotisants.add(g.nom());//Je met le nom du groupe dans la liste.
if(res==true){ //si nom du groupe n'est pas présent
while(it.hasNext()) //Je boucle sur la liste des enfants du noeud.
{
Cotisant c=it.next();
if(c.accepter(this)==false)
{
res=false;
break; //On sort alors de la boucle.
}
}
}
return res;
}

Et pourtant ça ne marche pas .Quelqu'un voit-il une erreur.

Cordialement

Tapio
Messages : 9
Inscription : 20 oct. 2018 17:09

Re: Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Message par Tapio » 29 nov. 2018 16:56

J'ai l'impression que break et return ne fonctionnent que pour la boucle actuelle, c'est à dire, vu que c'est récursif, que si il y a des groupes dans des groupes la méthode est appelée plusieurs fois. Je pense que tas valeur res est écrasée après ton return, car encore dans une boucle enveloppante.

Ma boucle ressemble à ceci (après beaucoup de bricolages et de tests ;.;) :

Code : Tout sélectionner

 for (Cotisant cot : g.getChildren()) { 
            res=cot.accepter(this);
            if (!res) { return false;}
        }  

Douin
Messages : 366
Inscription : 18 mars 2009 15:46

Re: Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Message par Douin » 30 nov. 2018 11:10

Bonjour, se servir d'un ensemble (le tp5) est une bonne voie

le Visiteur sans doublon contient une instance de TreeSet, ce qui donne en pseudo algo

un_ensemble comme variable d'instance
visiter un contributeur
return un_ensemble.add(nom de ce contributeur)

visiter un groupe de cotisants
boolean b = un_ensemble.add(nom de ce groupe)
pour tous les enfants de ce groupe
b = b and un_ensemble.add(nom de cet enfant)
return b

dites moi si cela est inspirant...

GANKAMA
Messages : 64
Inscription : 26 oct. 2017 16:51

Re: Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Message par GANKAMA » 30 nov. 2018 20:23

Bonjour,

Merci pour votre réponse ,j'avais bien saisi la première partie concernant le cas d'un contributeur.C'est sur la deuxième partie que j'ai eu des soucis .Si je tiens compte de vos remarques voila ce j'obtiens :

boolean res=listeCotisants.add(g.nom());
if(res==true){
for (Cotisant c : g.getChildren())
{
res=listeCotisants.add(c.nom());
if (res==false) {break;}
}
return res;
}
return res;


Mon souci c'est que le test "testLeMemeContributeurPresentTroisFoisAvecDesGroupesDeGroupes" ne passe pas .J'ai beau retourner l'algo dans tous les sens je ne trouve pas l'erreur.

Voici le résultat du test:

Ce composite a au moins un doublon, revoyez SansDoublon !!!
---
junit.framework.AssertionFailedError: Ce composite a au moins un doublon, revoyez SansDoublon !!!
at question2.TestsDesVisiteurs.testLeMemeContributeurPresentTroisFoisAvecDesGroupesDeGroupes(TestsDesVisiteurs.java:100)


Cordialement

Douin
Messages : 366
Inscription : 18 mars 2009 15:46

Re: Tp_Commit question2_3 sans doublon visite(GroupeDeContributeurs g)

Message par Douin » 01 déc. 2018 10:31

Bonjour,

Une boucle analogue à celle-ci ferait -elle l'affaire ? n'oubliez pas d'appeler accepter sur les enfants...

Code : Tout sélectionner

public Boolean visite d'un groupe

  boolean res=listeCotisants.add(g.nom());
  for (Cotisant c : g){
    res = res && c.accepter(c);
  }

  return res;
}


Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité