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

  FORUM HardWare.fr
  Programmation
  Java

  Besoin d'aide svp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide svp

n°1413951
mick8569
Posté le 26-07-2006 à 15:53:27  profilanswer
 

Salut à tous!
Voila mon problème :
 
Je suis en train de modéliser un arbre (binaire) en java.
J'ai donc une classe que l'on appelera arbre.
Pour les noeuds c'est un peu spécial, car il y a deux types de noeuds dans l'arbre. j'ai donc crée trois classes :
 - une classe Mère : Node
 - Deux classes Filles : InternalNode et LeafNode

Code :
  1. public class Node
  2. {
  3.     Node sonLeft;
  4.     Node sonRight;
  5.     .....
  6.     .....
  7. }


Code :
  1. public class LeafNode
  2. {
  3.     float [] donnee;
  4.     public LeafNode (Node sonLeft, Node sonRight, float[] donnee)
  5.     {
  6.     .....
  7. }


Code :
  1. public class InternalNode
  2. {
  3.     int donnee;
  4.     public LeafNode (Node sonLeft, Node sonRight, int donnee)
  5.     {
  6.     .....
  7. }


Code :
  1. public class Arbre
  2. {
  3.     Node root;
  4.     public Arbre (float[]donnee)
  5.     {
  6.         this.root = new LeafNode (null, null, donnee);
  7.     }
  8. }


 
et dans une fonction de la classe Arbre, il faudrait que je modifie les noeuds :

Code :
  1. public boolean Modif (float[] donnee, float[] donnee1, float[] donnee2, int axe)
  2. {
  3.      Node leNoeud = rechercheNoeud (donnee); // Fonction qui marche correctement
  4.      if (leNoeud != null)
  5.      {
  6.          Node sonLeft = new LeafNode (null, null, donnee1);
  7.          Node sonRight = new LeafNode (null, null, donnee2);
  8.          leNoeud = new internalNode (sonLeft, sonRight, axe);
  9.          return true;
  10.      }
  11.      return false;
  12. }


 
Le problème est que lorsque j'appelle cette fonction Modif, je n'ai pas les résultats des modifications (par exemple j'initialise avec le noeud root et après l'appel de cette fonction le noeud root est encore un noeud feuille alors que je voudrais qu'il soit du type InternalNode).
Je comprends très bien le problème puisqu'à mon avis à la fin de cette fonction les variables (leNoeud, sonLeft et sonRight) sont détruites ce qui fait que je ne récupère rien.
 
Mais je ne vois pas comment faire pour pouvoir récupérer tout ce que je veux (en C++, j'utiliserai des pointeurs mais la...).
 
Voila j'espere que je me suis bien fait comprendre et si quelqu'un sait comment faire, je suis preneur!
Merci d'avance!

mood
Publicité
Posté le 26-07-2006 à 15:53:27  profilanswer
 

n°1413961
zapan666
Tout est relatif
Posté le 26-07-2006 à 16:01:41  profilanswer
 

Il est etrange ton arbre.
Je vois pas l'interet de la classe internalNode
 
 
Sinon en java, tout est refence.
 
 
Tu veux faire quoi ? modifie leNoeud ? alors il ne faut pas faire un new dans ton if, mais plutot faire un set sur les propretes que tu veux changer

Code :
  1. public boolean Modif (float[] donnee, float[] donnee1, float[] donnee2, int axe)
  2.     {
  3.         Node leNoeud = rechercheNoeud (donnee); // Fonction qui marche correctement
  4.         if (leNoeud != null)
  5.         {
  6.             Node sonLeft = new LeafNode (null, null, donnee1);
  7.             Node sonRight = new LeafNode (null, null, donnee2);
  8.          
  9. leNoeud.setFilsGauche(sonLeft);
  10. leNoeud.setFilsDroit(sonRight);
  11. // etc
  12.             return true;
  13.         }
  14.         return false;
  15.     }


---------------
my flick r - Just Tab it !
n°1413969
mick8569
Posté le 26-07-2006 à 16:07:33  profilanswer
 

En fait la classe InternalNode me sert parce que je n'ai pas le meme type de donnée entre LeafNode et InternalNode (dans LeafNode mon type de donnée est un tableau de float et dans l'autre, c'est un entier).  
J'ai voulu faire ca plus proprement, mais je pourrai peut-etre faire juste une seule classe ou j'aurais trois variables :
- une qui m'indique quel est le type du noeud
- un tableau de float (utilisé par exemple quand la première variable est à vrai)
- un entier (utilisé inversement quand la première variable est à false)
 
Je pense que ca devrait marcher mais je ne sais pas si c'est le meilleur choix......

n°1413973
zapan666
Tout est relatif
Posté le 26-07-2006 à 16:10:26  profilanswer
 

mais pourquoi dans l'un c'est des entiers et l'autre des float ?
 
(mais ton probleme ne vient pas de la, soit dis en passant)


---------------
my flick r - Just Tab it !
n°1413982
mick8569
Posté le 26-07-2006 à 16:22:37  profilanswer
 

C'est juste que dans l'arbre je stocke deux types de données.  
Petit résumé rapide (ca risque de pas etre très clair car moi j'ai du mettre 3 semaines a comprendre tout ca) :
J'ai un premier arbre qui stocke des données sous forme de tableaux d'entiers.
Lorsque dans ce premier arbre je veux insérer une nouvelle donnée (nouveau tableau donc), et qu'il n'y a plus de place sur le noeud (un noeud peut avoir par exemple 3 entrées qui contiennent chacune une donnée), je dois "séparer" ces données pour les insérer sur deux noeuds.
Pour les séparer, je fais/calcule une "représentation graphique" en n dimensions (suivant les dimensions du tableau) et je choisis la meilleure répartition en fonction d'un "axe" sur la représentation.
 
Lorsque ceci a été fait, dans mon arbre binaire, j'insère sur un noeud le numéro de l'axe et les deux fils de ce noeud contiennent les répartitions.  
 
Voila je sais pas si j'ai été clair.
 
Sinon t'as pas d'idées sur comment je pourrai résoudre mon problème stp?

n°1413986
the real m​oins moins
Posté le 26-07-2006 à 16:26:50  profilanswer
 

merci de mettre un titre correct à ton topic.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1414817
axk47
Java Man vs Boolet Man
Posté le 27-07-2006 à 17:23:12  profilanswer
 

mick8569 a écrit :

En fait la classe InternalNode me sert parce que je n'ai pas le meme type de donnée entre LeafNode et InternalNode (dans LeafNode mon type de donnée est un tableau de float et dans l'autre, c'est un entier).  
J'ai voulu faire ca plus proprement, mais je pourrai peut-etre faire juste une seule classe ou j'aurais trois variables :
- une qui m'indique quel est le type du noeud
- un tableau de float (utilisé par exemple quand la première variable est à vrai)
- un entier (utilisé inversement quand la première variable est à false)
 
Je pense que ca devrait marcher mais je ne sais pas si c'est le meilleur choix......


 
La solution t'a été donnée dans le message précédent.
Utilise des getter et des setter pour modifier les attributs leNoeud,sonLeft et sonRigth  
ou bien ne redeclare pas une variable portant le meme nom que tes attributs

Code :
  1. 1.
  2.       public boolean Modif (float[] donnee, float[] donnee1, float[] donnee2, int axe)
  3.  
  4.          {
  5.  
  6.              Node leNoeud = rechercheNoeud (donnee); // Fonction qui marche correctement
  7.  
  8.              if (leNoeud != null)
  9.  
  10.              {
  11.  
  12.                  Node sonLeft = new LeafNode (null, null, donnee1);
  13.  
  14.                   Node sonRight = new LeafNode (null, null, donnee2);
  15.          
  16.       leNoeud.setFilsGauche(sonLeft);
  17.       leNoeud.setFilsDroit(sonRight);
  18.   this. setLeNoeud(leNoeud);
  19.                  return true;
  20.             }
  21.              return false;
  22.          }


 
voila


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

  Besoin d'aide svp

 

Sujets relatifs
Besoin urgent d'aideBesoin d'aide pour javacard
Petit projet...besoin d'aide :)Besoin d'aide pour job d'été !!
Besoin d'aide pour modif d'un .regGrand débutant a besoin de petite aide mysql_result
[Besoin d'aide] Un DELETE assez Tordu[resolu]besoin aide pour Jointure
Besoin d'un peu d'aide sur VBA dans wordBesoin d'aide affichage variable en php
Plus de sujets relatifs à : Besoin d'aide svp


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