Enregistrement d'un arbre en mémoire

cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004 - 28 oct. 2004 à 08:51
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 2 nov. 2004 à 09:26
Hello,
J'ai des méthodes afin de créer l'arborescence de mon arbre... Donc en mémoire!! Comment je fais pour le sauver dans un fichier et le restituer ensuite à la place mémoire???

mémoire <---> fichier

Un méthode pour enregistrer dans un fichier c pas compliqué (par exemple XMLEncodre.... etc) mais comment on pointe mon arbre??? et comment on le remet dans la mémoire??

car la création de mon arbre se passe comme ceci :

arbreGauche = new ArbreBinaire((new Character('B')));
arbreGauche.accrocherGauche(new ArbreBinaire(new Character('F')));
arbreGauche.accrocherDroit(new ArbreBinaire(new Character('G')));

arbreDroit = new ArbreBinaire(new Character('E'));
arbreDroit.accrocherGauche(new ArbreBinaire(new Character('I')));

arbre = new ArbreBinaire(new Character('A'));
arbre.accrocherGauche(arbreGauche);
arbre.accrocherDroit(arbreDroit);

// Avant modification de l'arbre original
System.out.println("Arbre initial: ");
// Parcours selon notation Lisp
System.out.print("Parcours Lisp: ");
arbre.parcoursLisp();

je sauve simplement "arbre" ?? puis pour le restituer en mémoire interne pour le modifier ou autre?? argh..

Merci les progs!!!

A+

12 réponses

cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
28 oct. 2004 à 09:45
C'est la restitution en mémoire que je "sens pas"...
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
28 oct. 2004 à 11:10
:big) Neodante :big)

Aujourd'hui je n'aurais pas le temps d'être en ligne, donc envoi moi ton code je verrais ce que je peux faire :
webmaster[at]neogamedev[dot]com
Mais déjà pour répondre à ta question, lorsque tu sérialise un objet, à moins de le restituer dans un prog java, cela ne te sert pas des masses. Sauf qu'ici il est en XML, donc tu pourras le modifier avec un prog SAX/DOM ou avec XSLT ...
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
28 oct. 2004 à 13:06
J'essai un peu par moi même de sauver mon arborescence... si jamais je te questionnerais vendredi. merci
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
29 oct. 2004 à 11:43
Salut NeoDante... Ben ca marche pas! snif...
j'arrive pas avec XMLEncoder a reproduire mon l'arborescence de mon arbre avec la valeur de ses noeuds! argg...
Comme je suis bloqué j'essaie avec DOM...
mais avec XMLEncodeur c possible de sauver l'arborescence de mon arbre qui est crée sous cette forme:
/*
A
B C
1 2 3 4

*/

arbreGauche = new ArbreBinaire((new Character('B')));
arbreGauche.accrocherGauche(new ArbreBinaire(new Character('1')));
arbreGauche.accrocherDroit(new ArbreBinaire(new Character('2')));

arbreDroit = new ArbreBinaire(new Character('C'));
arbreDroit.accrocherGauche(new ArbreBinaire(new Character('3)));
arbreDroit.accrocherDroit(new ArbreBinaire(new Character('4')));

arbre = new ArbreBinaire(new Character('A'));
arbre.accrocherGauche(arbreGauche);
arbre.accrocherDroit(arbreDroit);

// Avant modification de l'arbre original
System.out.println("Arbre initial: ");
// Parcours selon notation Lisp
System.out.print("Parcours Lisp: ");
arbre.parcoursLisp();

C'est possible???
Puis après depuis le fichier je dois pouvoir restituer ceci en mémoire.... bref c le pas suivant
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
29 oct. 2004 à 13:13
:big) Neodante :big)

Bah et cela doit se faire tout seul ... toutes les références d'un objet sont automatiquement enregistré lorsque tu enregistres cet objet ...
Je sais po pourquoi cela ne marcho po ...essaye simplement avec une classe tout bête, tu verras ça marche ...
As-tu lu la javadoc ???
@+

[Responsable www.neogamedev.com]
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
29 oct. 2004 à 13:20
:big) Neodante :big)

Attends je crois avoir trouvé ton erreur : une classe XML pour être sérialisable doit avoir un certain nombre de choses (obligatoires !):
- un constructeur par défaut :
public MaCLasse()
- Pour tous les champs que tu veux enregistrer tu dois avoir des accesseurs get/set:
int toto;
public void setToto(int);
public int getToto();
- Et implémenter l'interface Serializable (tu n'as pas besoin de surcharger de fonctions d'ailleurs !)

Avec ça pas de doute que ça marchera !!!!!
Oups j'avais oublié de le dire ...mais c'est dans la documentation Java ...
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
29 oct. 2004 à 14:29
Salut, ouais j'ai lu la javadoc mais c pas facile de tout adapter... bref je vais relire et re-tenter :-?

j'ai trouvé un prog qui lit du XML et qui peut l'enregistrer... tu en penses quoi? simple curiosité
http://lynx1.felk.cvut.cz/mep/doc/java/xml/java-xml.htm

A+
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
30 oct. 2004 à 17:59
:big) Neodante :big)

Si tu fais tout ce que j'ai marqué au dessus ça marche forcément !!! Evidemment touts les classes que tu veux voir sérialiser (même les classes qui se trouvent en référence !!) doivent implémenter Serializable ...
Je m'en sert dans mes prog ... donc ça marche très bien ... jamais eu de prob !
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
31 oct. 2004 à 17:28
salut!

Pour tous les champs que tu veux enregistrer tu dois avoir des accesseurs get/set:
int toto;
public void setToto(int);
public int getToto();

Donc les champs de mon arbre (dont tu as vu le code dans un de mes autres post) sont des lettres A,B...
Donc il faut que je mette des get et des set pour ces paramètres c'est ca?

public int setValeur();
public int GetValeur();

c'est un truc du genre?

merci pour ton aide!
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
1 nov. 2004 à 00:51
:big) Neodante :big)

Tout compris sauf que les accesseurs sont des choses de cette façon (tu t'ais trompé dans ton post !):
PRIVATE INT valeur;
public VOID setValeur(INT);
public int GetValeur();
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
2 nov. 2004 à 08:55
Petit souci de clareté. ce qui en est du contructeur, des get et des set c'est ok.

Donc j'ai mon arbre et chacun des mes noeuds contient un objet qui provient d'une autre classe (cette objet a un certain nombre d'element a sauver) dans mon code ci-dessus, pour simplifier la chose, j'ai simplement mis un String par Noeud.
ces get, set, et contructeur j'ai du mal a savoir ou les mettres.... dans le/les objecs que je veux sérialiser? donc dans mon noeud ( donc get et set pour mon "etiquette" dans ce cas là) et pour mon arbre??

merci pour ton aide :-)
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
2 nov. 2004 à 09:26
:big) Neodante :big)

Regarde j'ai fait un tutorial spécialement pour toi ... et en plus c'est une liste chainée avec n'importe quel objet (bon j'ai également mis des string pour l'exemple) ... je pense que cela devrait t'aider !
@+

[Responsable www.neogamedev.com]
0
Rejoignez-nous