Bonjour, voici le problème:
Je veux enlever l'élément M de la liste L sachant que L est une liste de ModuleTree, c'est à dire une structure arborescente définie comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class ModuleTree{
	boolean leaf = false;
	LinkedList children=new LinkedList();
	String label="";
	Vertex representant=null;
Donc L ressemble à ça :
[ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Ci dessus par exemple on veut enlever le module ||(770 : SHS1) (1 : YDL225W)), il faut donc faire une fonction récursive. Voilà à quoi j'ai pensé :

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
 
public static LinkedList listeSansM(LinkedList L, ModuleTree M){
 
         for(Iterator IT=L.iterator();IT.hasNext(); ){
          ModuleTree Mtmp = (ModuleTree) IT.next();
 
          System.out.println("Mtmp : "+Mtmp.toString());
          System.out.println("M : "+M.toString());
          System.out.println("L= "+L.toString());
            if(Mtmp.equals(M))
           {
             L.remove(M);
            }else{
             System.out.println("Mtmp.isLeaf?"+Mtmp.toString()+" : "+Mtmp.isLeaf());
               if(!Mtmp.isLeaf()){
                LinkedList Ltmp=Mtmp.getChildren();
                System.out.println("enfant : "+Ltmp.toString());
                listeSansM(Ltmp,M);
                }
              }
         }
 
         System.out.println("Lfinal= "+L.toString());
         return L;
        }
Mais ça semble boucler, voilà l'affichage que j'obtiens jusqu'à l'erreur :

Mtmp : (111 : CDC12)
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf? (111 : CDC12) : true
Mtmp : (270 : BNI4)
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf? (270 : BNI4) : true
Mtmp : * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3))
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf?* (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)) : false
enfant : [|| ( (770 : SHS1) (1 : YDL225W)), (17 : CDC11), (803 : GIN4), (723 : CDC3)]
Mtmp : || ( (770 : SHS1) (1 : YDL225W))
M : || ( (770 : SHS1) (1 : YDL225W))
L= [|| ( (770 : SHS1) (1 : YDL225W)), (17 : CDC11), (803 : GIN4), (723 : CDC3)]
Ca serait le remove qui ne passe pas ? Me suis-je plantée dans ma récursion ?
Merci pour vos remarques et solutions que vous pourrez m'apporter...