Problème pour implémenter classe pile en liste chainée

Problème pour implémenter classe pile en liste chainée - Java - Programmation

Marsh Posté le 14-04-2007 à 22:06:49    

Bonjour, dans l'optique de m'entrainer en java, je réalise actuellement une classe chargé de l'implémentation d'un type pile en liste chainée.
J'ai donc un panel de fonction classique à implémenter tel : size(), add(), sub(), ...
Et au niveau du add j'ai des problèmes pour l'implémentation :

 

Classe pilenempty :

Code :
  1. private String head;
  2. private Pile tail;
  3. private int size ;
  4. public pilenempty(String a){
  5. head = a;
  6. tail = null;
  7. size = 1;
  8. }
  9. public void add(String a){
  10. Pile temp = new pilenempty(a);
  11. temp.tail = this;
  12.         temp.size = this.size() + 1;
  13. this = temp;
  14. }
 

Comme vous pouvez le voir, j'ai tenté le add avec l'intuition (je suis plus coutumier des pointeur en pascal), ce qui évidemment ne marche pas.
Quelqu'un pourrait-il me mettre sur le droit chemin ?
Merci d'avance.

 


Message édité par Siron le 14-04-2007 à 22:10:37
Reply

Marsh Posté le 14-04-2007 à 22:06:49   

Reply

Marsh Posté le 14-04-2007 à 23:57:42    

Je connais pas bien le pascal, mais la en effet c'est de pietre qualite comme code .
 
Moi je verrais plutot un truc du genre :  

Code :
  1. class Pile{
  2.     private ArrayList pile;
  3.     public Pile(){
  4.         pile = new ArrayList();
  5.     }
  6.      public void add(Object o){
  7.          pile.add(o);
  8.      }
  9.      public int size(){
  10.          return pile.size();
  11.      }
  12. }


 
Dans ton cas, tu recree un nouvel objet pielempty a chaque fois , c'est donc pas génial, tu as une multitude liste a un seul element....
 
Si tu as d'autre questions....

Reply

Marsh Posté le 15-04-2007 à 10:07:59    

Oui je sais que c'est surement pas top, mais c'est ce que j'aimerais faire si il y a moyen.

 

En gros on a fait cet exercice à un tp java et je le refais de mon coté sans regarder le tp.
Au tp dans le add, on injecte en paramètre le this dans le constructeur appelé de sorte que le constructeur fasse un truc genre : tail = t (qui est le this du add en paramètre) et head = le String.
Moi j'aimerais bien  tester sans passer le this en paramètres.

 

J'ai l'impression que dans

Code :
  1. temp.tail = this;
  2. temp.size = this.size() + 1;

je n'ai pas accès aux variables internes du temp, c'est probable ?


Message édité par Siron le 15-04-2007 à 10:27:26
Reply

Marsh Posté le 15-04-2007 à 17:54:33    

C'est plus que probable, c'est certain, ils sont marqués private donc inaccessibles "de l'extérieur" [:spamafote]
 
De plus Java demande une approche objet des systèmes, donc tu n'est pas censé faire ce genre de choses. Ici tu dois créer une classe Pile qui va contenir toutes les opérations qu'elle effectue sur elle même.
 
Après, tu as grosso modo 3 approches possibles:

  • Celle de jbourdellon, dans laquelle ta classe de pile n'est qu'un wrapper pour un objet existant du JDK (c'est la plus simple)
  • Faire la même chose mais en le réimplémentant manuellement, dans ce genre de cas tu vas probablement avoir besoin d'une classe Stack et d'une classe permettant de gérer les éléments de ta stack (des cons cells), qui va créer comme le cas précédent une pile mutable
  • Ou alors tu utilises tes cons cells directement comme des piles, en ce cas tes piles deviennent immutables


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-04-2007 à 15:54:06    

Donc si je comprends bien dans mon cas, comme chaque domino de la pile est un nouvel objet en soit, un domino ne peut avoir accès à la rep interne d'un autre domino (et ce même si ils sont gérer pas la même classe) ?
Dans ce cas je vais aller voir l'approche qu'ils ont fait au tp.
 
Et je vois clairement que c'est très moche comme approche, mais le but c'est de m'entrainer à gérer les références.
 
Une petite question à propo du this : c'est légal de changer ça valeur de référence betement comme ça : this = a; dans le cas ou a est un type totalement différent de a ?  
 
Merci pour votres aides.  :jap:  
Siron

Reply

Marsh Posté le 16-04-2007 à 16:00:40    

Siron a écrit :

Donc si je comprends bien dans mon cas, comme chaque domino de la pile est un nouvel objet en soit, un domino ne peut avoir accès à la rep interne d'un autre domino (et ce même si ils sont gérer pas la même classe) ?


Oui, ce sont des instances différentes d'une même classe, donc des objets réellement différents, donc pas de possibilité d'accès aux membres privés de leurs camarades.

Siron a écrit :


Une petite question à propo du this : c'est légal de changer ça valeur de référence betement comme ça : this = a; dans le cas ou a est un type totalement différent de a ?  


J'en doute, mais je dois te dire que je n'ai jamais essayé de faire un truc pareil, l'intérêt est limité et il y a toujours un moyen de faire autrement (et probablement plus proprement)


Message édité par masklinn le 16-04-2007 à 16:01:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-04-2007 à 09:59:49    

Citation :

Oui, ce sont des instances différentes d'une même classe, donc des objets réellement différents, donc pas de possibilité d'accès aux membres privés de leurs camarades.


Je comprends dès lors pourquoi au tp ils passaient en paramètre les valeurs internes du this.

 

Merci pour ces éclaircissement  :jap:

 

Siron


Message édité par Siron le 17-04-2007 à 10:00:17
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed