algorithme pour derouler les donnees d'un arbre en java - Java - Programmation
Marsh Posté le 02-05-2006 à 17:21:15
Citation : La racine de labre sera le ACCOUNTING et a chaque fois que je rencontre un START dans une ligne je dois creer un noeud et des que je rencontre un STOP le dernier noeud (=celui auquel jen etais avant de rencontrer le STOP) devient une feuille. Et si je rencontre un autre STOP je remonte dans larbre et je ferme lavant dernier nosud et ainsi de suite... |
Beh, tu viens de le donner.
Marsh Posté le 02-05-2006 à 17:32:03
lol
cest malin....le probleme cest que je ne sais pas comment my prendre pour le coder en java...
Marsh Posté le 02-05-2006 à 17:46:06
Ta question n'est donc pas d'élaborer l'algo, mais de coder en Java.
C'est deux choses tout à fait différentes.
Et que connais-tu en Java ?
Ici, on ne fait pas le travail à la place des autres. Le mieux est que tu proposes un début d'implémentation et/ou que tu poses des questions relatives à la structure de données, etc.
Marsh Posté le 02-05-2006 à 18:08:40
je manipule un les collections....dailleurs en ce moment je suis sur une implementation avec linkedlist mais jai pas limpression que ca fonctionne.... mais je persevere, je nabandonne pas...
while (i.hasNext()){
while(((XmlLogLine)i.next()).isStart()){
DefaultMutableTreeNode tmp =
new DefaultMutableTreeNode(((XmlLogLine)i.next()).getLog_method());
//category = new DefaultMutableTreeNode("Books for Java Programmers" );
top.add(tmp);
}
}
Marsh Posté le 03-05-2006 à 11:58:02
voici mon code:
public TreeDemo() {
super(new GridLayout(1,0));
XmlLogCol result = new XmlLogCol();
result.unSerialize("G:\\Projet_interface_graphique_java\\gemprojetvincent\\Gemlca\\test.obj" );
Iterator i = result.iterator();
DefaultMutableTreeNode racine =
new DefaultMutableTreeNode(((XmlLogLine)i.next()).getLog_method());
createNodes(i,racine);
JScrollPane treeView = new JScrollPane(tree);
}
private DefaultMutableTreeNode createNodes(Iterator i,DefaultMutableTreeNode racine) {
DefaultMutableTreeNode noeud = null;
DefaultMutableTreeNode feuille = null;
while(i.hasNext()){
if(((XmlLogLine)i.next()).isStart()){
noeud = new DefaultMutableTreeNode(((XmlLogLine)i.next()).getLog_method());
racine.add(noeud);
createNodes(i,noeud); /* ligne 185*/
}
else if(((XmlLogLine)i.next()).isStop()){
}
if(((XmlLogLine)i.next()).isStartStop()){ /* ligne 190*/
feuille = new DefaultMutableTreeNode(((XmlLogLine)i.next()).getLog_method());
racine.add(feuille);
createNodes(i,feuille);
}
}
return racine;
}
mais seul le premier if de la fonction createNodes marche je ne sais pas pourquoi, la deuxieme et la troisieme ne marche pas ....jai des erreurs a la compilation.
les voici:
Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
at java.util.LinkedList$ListItr.next(Unknown Source)
at exemples.TreeDemo.createNodes(TreeDemo.java:190)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.createNodes(TreeDemo.java:185)
at exemples.TreeDemo.<init>(TreeDemo.java:64)
at exemples.TreeDemo.createAndShowGUI(TreeDemo.java:272)
at exemples.TreeDemo.access$0(TreeDemo.java:254)
at exemples.TreeDemo$1.run(TreeDemo.java:287)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Marsh Posté le 03-05-2006 à 12:01:55
des appels successifs a next() donnent chaque fois l'element suivant, donc si dans ton while(i.hasNext()) t'appelles plusieurs fois next, tu te mets dans la situation ou tu tente d'acceder a un élément apres l'élément de fin.
Marsh Posté le 03-05-2006 à 14:54:12
ehhh merci.... ca marche...enfin, jai n'ai plus ce probleme en tout cas.
jai fais quelaues modification mais larbre que je cree ne correspond pas a lalgo decrit au dessus. Je ne sais pas ce qui ne va pas.
private DefaultMutableTreeNode createNodes(Iterator i,DefaultMutableTreeNode racine) {
DefaultMutableTreeNode noeud = null;
DefaultMutableTreeNode feuille = null;
DefaultMutableTreeNode tmp2 = racine;
XmlLogLine tmp = new XmlLogLine();
while(i.hasNext()){
tmp = (XmlLogLine)i.next();
if(tmp.isStart()){
noeud = new DefaultMutableTreeNode(tmp.getLog_method());
racine.add(noeud);
racine=noeud;
}
else if(tmp.isStop()){
racine=tmp2;
}
if(tmp.isStartStop()){
feuille = new DefaultMutableTreeNode(tmp.getLog_method());
racine.add(feuille);
}
}
Marsh Posté le 03-05-2006 à 14:57:34
le probleme cest que quand je rencontre des STOP dans la ligne du fichier log, je ne sais pas comment faire pour revenir en arriere (au noeud precedent).
Jai bien essayer de memoriser linformation concernant lavant dernier noeud mais ca ne suffit pas car il me faut egalement les noeud avant le precedent(les noeuds encore plus haut que lavant dernier).
Pour cela jai suppose que le meilleur moyen etait de faire un algo recursif...........mais ca marche pas du tonnerre.....
un coup de pouce sil vous plait....merci
Marsh Posté le 03-05-2006 à 15:14:11
max25b a écrit : Pour cela jai suppose que le meilleur moyen etait de faire un algo recursif...........mais ca marche pas du tonnerre..... |
Bah si, faut essayer
Marsh Posté le 03-05-2006 à 16:33:00
salut,
jai essaye avec un algo recursif et je nai pas obtenu de resultat satisfaisant cest pour cette rason que javais dit "jai suppose".
voici le code: cest toujours le meme probleme, je narrive pas retenir en memoire les START deja trouve..
private DefaultMutableTreeNode createNodes(Iterator i,DefaultMutableTreeNode racine) {
DefaultMutableTreeNode noeud = null;
DefaultMutableTreeNode feuille = null;
DefaultMutableTreeNode tmp2 = racine;
XmlLogLine tmp = new XmlLogLine();
while(i.hasNext()){
tmp = (XmlLogLine)i.next();
System.out.println(tmp.isStart());
if(tmp.isStart() && !(tmp.isStartStop())){
//createNodes(i,racine);
noeud = new DefaultMutableTreeNode(tmp.getLog_method());
racine.add(noeud);
//racine=noeud;
createNodes(i,noeud);
}
else if(tmp.isStop() && !(tmp.isStartStop())){
racine=tmp2;
createNodes(i,racine);
}
else if(tmp.isStartStop()){
feuille = new DefaultMutableTreeNode(tmp.getLog_method());
racine.add(feuille);
createNodes(i,racine);
}
}
Marsh Posté le 03-05-2006 à 19:29:49
voici mon code:
private DefaultMutableTreeNode createNodes(Iterator i,DefaultMutableTreeNode racine) {
DefaultMutableTreeNode noeud = null;
DefaultMutableTreeNode feuille = null;
DefaultMutableTreeNode tmp2 = racine;
XmlLogLine tmp = new XmlLogLine();
while(i.hasNext()){
tmp = (XmlLogLine)i.next();
racine.setAllowsChildren(true);
noeud = new DefaultMutableTreeNode(tmp.getLog_method());
if(tmp.isStart() && !(tmp.isStartStop())){
racine.add(noeud);
createNodes(i,noeud);
}
else if(tmp.isStop() && !(tmp.isStartStop())){
(TreeNode)racine=racine.getParent();
}
else if(tmp.isStartStop()){
racine.add(noeud);
}
}
le probleme est que je narrive pas avoir le parent avec la fonction getparent car elle renvoie un TreeNode et vu que TreeNode est une interface...je ne sais pas comment recuperer la valeur de retour de getparent()......
un coup de main sil vous plait.
merci
Marsh Posté le 02-05-2006 à 17:11:38
salut,
est ce quelqu'un pourrait me proposer un algorithme pour derouler les donnees d'un arbre.
Cest a dire que les donnees que doit contenir larbre est dans une collection, et voici (=voir plus bas) a quoi resemble la collection (la collection contient des lignes d'un fichier log; d'un LEVEL a un autre LEVEL forment une ligne):
Et j'ai acces a chaque parti de la ligne(ex:le level, le time, le thread.....)
La racine de labre sera le ACCOUNTING et a chaque fois que je rencontre un START dans une ligne je dois creer un noeud et des que je rencontre un STOP le dernier noeud (=celui auquel jen etais avant de rencontrer le STOP) devient une feuille. Et si je rencontre un autre STOP je remonte dans larbre et je ferme lavant dernier nosud et ainsi de suite...
Donc est ce que quelqu'un pourrait me proposer un algorithme pour cela, svp??
merci
[Level:ACCOUNTING - Time:1145460786832 - Thread:http-8082-Processor25 - Classe:uk.ac.wmin.cpc.gemlca.frontend.helpers.FrontendSetup DecorateWithSubject - Logger:uk.ac.wmin.cpc.gemlca.frontend.helpers.FrontendSetup - Message:START: /C=UK/O=eScience/OU=Westminster/L=ComputerScience/CN=thierry delaitre - NDC:ndc - Line:62 - File:FrontendSetup.java]
[Level:DEBUG - Time:1145460786833 - Thread:http-8082-Processor25 - Classe:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess getLCParameters - Logger:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess - Message:start - NDCC=UK/O=eScience/OU=Westminster/L=ComputerScience/CN=thierry delaitre - Line:155 - File:GLCProcess.java]
[Level:DEBUG - Time:1145460786834 - Thread:http-8082-Processor25 - Classe:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess getLCProcess - Logger:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess - Message:start/stop - NDCC=UK/O=eScience/OU=Westminster/L=ComputerScience/CN=thierry delaitre - Line:300 - File:GLCProcess.java]
[Level:DEBUG - Time:1145460786834 - Thread:http-8082-Processor25 - Classe:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess getResource - Logger:uk.ac.wmin.cpc.gemlca.frontend.GLCProcess.impl.GLCProcess - Message:start - NDCC=UK/O=eScience/OU=Westminster/L=ComputerScience/CN=thierry delaitre - Line:71 - File:GLCProcess.java]
......
[Level:ACCOUNTING - Time:1145460786877 - Thread:http-8082-Processor25 - Classe:uk.ac.wmin.cpc.gemlca.frontend.helpers.FrontendMessages AbandonSubjectDecoration - Logger:uk.ac.wmin.cpc.gemlca.frontend.helpers.FrontendMessages - Message:STOP: /C=UK/O=eScience/OU=Westminster/L=ComputerScience/CN=thierry delaitre - NDC:ndc - Line:54 - File:FrontendMessages.java]