Question d'un ignorant en Java

Programmation Avancée

Moderator: douinj

Post Reply
marti_r1
Posts: 66
Joined: 07 Oct 2021 20:16

Question d'un ignorant en Java

Post by marti_r1 » 16 Nov 2021 10:29

Bonjour question qui peut être vous paraîtra hallucinante mais voila quand je code :

public class CareTaker{

private List<Memento> pile=new Stack<Memento>();

public CareTaker(){
}

public void empiler(Memento memento){
pile.add(memento); <--------------------------------------- Ici
}

public Memento depiler(indice){
return pile.get(indice);
}
}

Quand je code .add ça n'est pas souligné en rouge, si par contre je code .push, c'est souligné en rouge.
Je voudrai être certain de ne pas dire de bêtise ou d'avoir bien compris.
Push c'est bien une méthode de classe stack mais comme j'ai indiqué List<Memento> pile=new Stack<Memento>(), ça signifie que "ma stack implémente l'interface List" et que c'est donc la méthode add de List qu'il faut appeler.
En appelant add de List ça fait push sur stack, c'est ça ou je dis n'importe quoi ?
Cordialement

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: Question d'un ignorant en Java

Post by douinj » 16 Nov 2021 12:02

Bonjour, vous faites bien de poser des questions via ce forum d'entraides

Quand vous déclarez

Code: Select all

 List<Memento> pile
Vous n'avez de pile que le nom, c'est une liste et vous ne pourrez utiliser que les méthodes issues des interfaces List + Collection cf extends sur les interfaces (une idée simple renommez pile en liste
En appelant add de List ça fait push sur stack
Ce n'est pas garanti du tout, on n'en sait rien...

Bonne liste, ce soir nous travaillons Memento...

marti_r1
Posts: 66
Joined: 07 Oct 2021 20:16

Re: Question d'un ignorant en Java

Post by marti_r1 » 16 Nov 2021 12:44

Voila mon "implémentation" de Memento :

public class JPanelListe2 extends JPanel implements ActionListener, ItemListener{



private CareTaker careTaker;
//Variable globale caretaker de classe CareTaker


public JPanelListe2(List<String> liste,Map<String,Integer> occurrences){

boutonRetirer.addActionListener(this);
boutonAnnuler.addActionListener(this);



careTaker=new CareTaker();
//Instanciée dans le constructeur de la classe JPanelListe2


}

public void actionPerformed(ActionEvent ae){
try{



}else if(ae.getSource()==boutonRetirer){
careTaker.add(this.saveToMemento());
//Par la méthode de classe JPanelListe2 saveToMemento(), je crée un objet de classe Memento dont sa propre Liste (listeMememto) correspond à celle de JPanelListe2 avant toute modification.
Cet objet "sauvegarde" est archivé dans pile de careTaker qui est "une stack de memento".

res=…;
afficheur.setText(…);

...

}else if(ae.getSource()==boutonAnnuler){
this.getFromMemento(careTaker.get(careTaker.taille()-1));
//Quand on clic sur le bouton annuler :

- careTaker.get(careTaker.taille()-1), la méthode get() de classe CareTaker, retourne l’objet "sauvegarde" memento stocké au sommet de la pile de caretaker (une stack de memento).
- this.getFromMemento(…), la méthode getFromMemento() de classe JPanelListe2 récupère la liste de l’objet "sauvegarde" memento et remplace sa propre liste modifiée après clic sur le bouton retirer par exemple, par celle de l’objet "sauvegarde" memento avant modification.
}

texte.setText(liste.toString());
}catch(Exception e){
afficheur.setText(e.toString());
}
}

private boolean retirerDeLaListeTousLesElementsCommencantPar(String prefixe){

}

public Memento saveToMemento(){
return new Memento(liste);
}

public void getFromMemento(Memento memento){
this.liste=memento.getListe();
}



package question2;
import java.util.*;

public class CareTaker{

private List<Memento> pile=new Stack<Memento>();

public CareTaker(){
}

public void add(Memento memento){
pile.add(memento);
}

public Memento get(int indice){
return pile.get(indice);
}

public int taille(){
return pile.size();
}
}



package question2;
import java.util.*;

public class Memento{

private List<String> listeMemento;

public Memento(List<String> liste){
this.listeMemento=liste;
}

public List<String> getListe(){
return listeMemento;
}
}


Et bien malgré mon raisonnement, je me suis inspiré de ce que j'ai trouvé sur le net bien sûr, ben quand je teste ça marche pas ?

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: Question d'un ignorant en Java

Post by douinj » 16 Nov 2021 12:48

re,

C'est de la synonymie ... attention
this.listeMemento=liste;
http://lmi92.cnam.fr/nfp121/supports/NF ... uction.ppt diapositive 38

Bonne copie de liste

marti_r1
Posts: 66
Joined: 07 Oct 2021 20:16

Re: Question d'un ignorant en Java

Post by marti_r1 » 16 Nov 2021 13:46

Exacte, je viens de m'en rendre compte avant d'avoir lu votre réponse, j'ai corrigé et ça marche :-) :-) :-) :-)
Désolé, j'aurai du y réfléchir avec mon dessin et mes pointeur sur ma feuille avant de poser la question.
Merci pour votre réponse

Post Reply