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

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Liste chaînée - Pile

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Liste chaînée - Pile

n°2205903
roswellent​ongues
Posté le 08-10-2013 à 16:01:11  profilanswer
 

Bonjour,  
 
Je suis un peu coincé sur une dernière méthode de classe de création de pile à partir d'une liste chaînée. La méthode toString me gêne un peu car j'aimerais pouvoir avoir quelque chose de la forme "[4, 3, 2, 1]", donc pouvoir remonter la pile "à rebrousse-poil" si on a empilé 1 puis 2 puis 3 puis 4.
 
J'ai commencé à faire une Stack temporaire pour pouvoir stocker le sommet de la pile, puis dépiler et à la fin reconstruire, mais je n'y parviens pas.
 
Je donne le code de la classe au quasi complet pour plus de clarté.
 

Code :
  1. public class PileListe implements PileI, Cloneable {
  2.     /** la liste des Maillons/Elements */
  3.     private Maillon stk;
  4.     /** la capacité de la pile */
  5.     private int capacite;
  6.     /** le nombre */
  7.     private int nombre;
  8.         private static class Maillon implements Cloneable {
  9.         private Object element;
  10.         private Maillon suivant;
  11.         public Maillon(Object element, Maillon suivant) {
  12.             this.element = element;
  13.             this.suivant = suivant;
  14.         }
  15.         public Maillon suivant() {
  16.             return this.suivant;
  17.         }
  18.         public Object element() {
  19.             return this.element;
  20.         }
  21.         public Object clone() throws CloneNotSupportedException {
  22.             Maillon m = (Maillon) super.clone();
  23.             m.element = element;
  24.             return m;
  25.         }
  26.     }
  27.     public PileListe(int taille) {
  28.         if (taille <= 0)
  29.             taille = CAPACITE_PAR_DEFAUT;
  30.         this.stk = null;
  31.         this.capacite = taille;
  32.     }
  33.     public PileListe() {
  34.         this(PileI.CAPACITE_PAR_DEFAUT);
  35.     }
  36.     public void empiler(Object o) throws PilePleineException {
  37.         if (estPleine())
  38.             throw new PilePleineException();
  39.         stk = new Maillon (o,stk);
  40.         nombre = nombre + 1 ;
  41.         }
  42.     public Object depiler() throws PileVideException {
  43.         if (estVide())
  44.             throw new PileVideException();
  45.         if (stk != null) {
  46.           Object o = stk.element();
  47.           stk = stk.suivant();
  48.           return o;
  49.           }
  50.           else return null;
  51.        
  52.     }
  53.     public Object sommet() throws PileVideException {
  54.         if (estVide())
  55.             throw new PileVideException();
  56.         return stk.element ;
  57.     }
  58.  
  59.     public boolean estVide() {
  60.         return stk == null ;
  61.     }
  62.       public boolean estPleine() {
  63.         return this.taille() >= capacite ;
  64.     }
  65.    // ici que ça coince     
  66.    public String toString() {
  67.         String s = "[";
  68.          Stack temp = new Stack();
  69.        while (!this.estVide()) {
  70.              temp.push(stk.element);
  71.               s = s + stk.element;
  72.               depiler();
  73.             }
  74.         return s + "]";
  75.     }
  76.     //...
  77.   }


 
Merci par avance


Message édité par roswellentongues le 08-10-2013 à 16:02:13
mood
Publicité
Posté le 08-10-2013 à 16:01:11  profilanswer
 

n°2205944
lasnoufle
La seule et unique!
Posté le 08-10-2013 à 18:50:22  profilanswer
 

Wesh
 
J'dois etre un peu neuneu et j'ai pas d'IDE Java donc je peux pas verifier, mais c'est quoi qui marche pas dans ton code?
Si j'ai bien suivi, si tu empiles 1,2,3,4 tu vas depiler 4,3,2,1 et ta methode toString devrait renvoyer le bon resultat ([4,3,2,1]).
 
Sauf que de visu, tu inseres pas les virgules donc ca va plutot retourner [4321], ta Stack temp ne sert a rien (tu mets des trucs dedans mais tu t'en sers jamais), et toString est censee etre neutre vis a vis de l'etat de ton objet, alors que la tu depiles carrement les elements pour de bon, et donc suite a un appel a toString ta pile finit vide.
 
Si tu veux eviter de depiler, pars de stk et utilise un pointeur specifique histoire de pas toucher a ta pile:

Maillon m = stk;
while (m!=null)
  s = s + m.element();
  m = m.suivant();
}


(manque encore les virgules, et pas teste)


---------------
C'était vraiment très intéressant.
n°2205956
roswellent​ongues
Posté le 08-10-2013 à 19:26:27  profilanswer
 

Je sais pas pourquoi je cherchais compliqué. En voyant ta solution, jme suis presque mis une baffe tellement c'est évident. :S
 
Du coup, ça donne ça  

Citation :


public String toString() {
 
  String s = "[";
  Maillon tmp = stk;
  while (tmp != null){
  s = s + tmp.element() ;
    tmp = tmp.suivant();
    if (tmp !=null) {s = s + ",";}  
    }  
  return s + "]";
 }


 


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

  [Java] Liste chaînée - Pile

 

Sujets relatifs
[Java] Aide pour un programmeTracer d'une fonction de répartition sous java
envoyer des paramètre d'une application java à une application c++l'échange des données entre une application c++ et application java
lancer une application c++ depuis une autre application codé en java[PHP/JQuery] Liste déroulante suivit Autocomplete
Probleme Application JAVA Connexion DB MySQL (connector/J driver)Java / Javascript : Quel moteur est utilisé ?
JAVA/ J2EE ou PHP ?requète dans une liste déroulante
Plus de sujets relatifs à : [Java] Liste chaînée - Pile


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