Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2659 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  algorithme pour derouler les donnees d'un arbre en java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

algorithme pour derouler les donnees d'un arbre en java

n°1357943
max25b
Posté le 02-05-2006 à 17:11:38  profilanswer
 

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 - NDC:/C=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 - NDC:/C=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 - NDC:/C=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]

mood
Publicité
Posté le 02-05-2006 à 17:11:38  profilanswer
 

n°1357960
sircam
I Like Trains
Posté le 02-05-2006 à 17:21:15  profilanswer
 

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. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1357971
max25b
Posté le 02-05-2006 à 17:32:03  profilanswer
 

lol
cest malin....le probleme cest que je ne sais pas comment my prendre pour le coder en java...

n°1357984
sircam
I Like Trains
Posté le 02-05-2006 à 17:46:06  profilanswer
 

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.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1358000
max25b
Posté le 02-05-2006 à 18:08:40  profilanswer
 

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);
 
         }
        }

n°1358499
max25b
Posté le 03-05-2006 à 11:58:02  profilanswer
 

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)

n°1358502
boulax
Inserer phrase hype en anglais
Posté le 03-05-2006 à 11:59:57  profilanswer
 

Exception != erreur de compilation

n°1358506
boulax
Inserer phrase hype en anglais
Posté le 03-05-2006 à 12:01:55  profilanswer
 

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.

n°1358657
max25b
Posté le 03-05-2006 à 14:54:12  profilanswer
 

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);
             }
        }

n°1358667
max25b
Posté le 03-05-2006 à 14:57:34  profilanswer
 

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

mood
Publicité
Posté le 03-05-2006 à 14:57:34  profilanswer
 

n°1358685
boulax
Inserer phrase hype en anglais
Posté le 03-05-2006 à 15:14:11  profilanswer
 

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 :o

n°1358819
max25b
Posté le 03-05-2006 à 16:33:00  profilanswer
 

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);
         }
                 }

n°1359016
max25b
Posté le 03-05-2006 à 19:29:49  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  algorithme pour derouler les donnees d'un arbre en java

 

Sujets relatifs
Bases de données : dépendances3D et java
En PHP, comment placer les données d'un XML dans MySQL avec XSLT ?[VBA] Creer une macro qui echange des donnees entre feuilles
redirection après envoi de donnéesCacher des données
package javaRécupération des données de formulaires via PHP
optimisatiser la structure d'une base de données...[java] convertir .pdf >> .html et .doc >> .html
Plus de sujets relatifs à : algorithme pour derouler les donnees d'un arbre en java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR