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:
Donc L ressemble à ça :
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;
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é :[ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mais ça semble boucler, voilà l'affichage que j'obtiens jusqu'à l'erreur :
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; }
Ca serait le remove qui ne passe pas ? Me suis-je plantée dans ma récursion ?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)]
Merci pour vos remarques et solutions que vous pourrez m'apporter...
Partager