TP3 relecture objet pile

Programmation Avancée

Modérateur : douinj

marqu_p7
Messages : 4
Inscription : 20 oct. 2020 20:44

TP3 relecture objet pile

Message par marqu_p7 » 20 oct. 2020 20:54

Bonsoir,

Après plusieurs heures d'efforts, je me résous à poster ce message.

Dans empiler, je renseigne la valeur 1:
empiler : 1
lecture pile à la fin d'empiler ... this.ptr = 0 et valeur = 1
this.ptr = 1

Puis j'empile encore avec la valeur 2:
empiler : 2
lecture pile à la fin d'empiler ... this.ptr = 1 et valeur = 2
lecture pile à la fin d'empiler ... this.ptr = 0 et valeur = 2
this.ptr = 2

ma valeur 1 de this.ptr = 0 a été changée. J'attendais 1 ...

Je n'ai pas changé l'empilement : this.zone[this.ptr] = i;
et voici comment je lis la pile dans la boucle: valeur = ((JTextField) this.zone[this.ptr]).getText();

any idea?

Merci, bonne soirée,
Philippe

douinj
Messages : 204
Inscription : 18 mars 2009 15:46

Re: TP3 relecture objet pile

Message par douinj » 21 oct. 2020 9:14

Bonjour,

Cherchez de ce côté, cette instruction est curieuse ... ((JTextField) this.zone[this.ptr]).getText();

marqu_p7
Messages : 4
Inscription : 20 oct. 2020 20:44

Re: TP3 relecture objet pile

Message par marqu_p7 » 22 oct. 2020 16:57

Bonsoir,

Je suis toujours à la question 1. Un petit coup de pouce serait le bienvenu.

Dans toString(), j'ai des objets dans zone et je sais qu'ils sont du type JTextField.

Voici ma boucle simplifiée:
for (int i = ptr - 1; i >= 0; i--) {
entree = (JTextField) zone;
valeur = entree.getText();
}

si j'empile 1, valeur = 1 et j'obtiens [1]
si j'empile 2, valeur = 2 quelque soit la valeur de i et j'obtiens [2,2]

L'empilement et le dépilement fonctionnent, y compris avec PilePleine et PileVide.

Il y a juste cet affichage et je souhaiterais pouvoir jouer avec les questions suivantes :-)

Merci pour votre aide,

Philippe

douinj
Messages : 204
Inscription : 18 mars 2009 15:46

Re: TP3 relecture objet pile

Message par douinj » 22 oct. 2020 17:37

Bonjour,
Dans toString(), j'ai des objets dans zone et je sais qu'ils sont du type JTextField.
Ils ne doivent pas être de ce type, ce sont des Object, plutôt des String que vous entrez au clavier et que vous empilez

à suivre

favre_be
Messages : 6
Inscription : 21 oct. 2020 12:37

Re: TP3 relecture objet pile

Message par favre_be » 22 oct. 2020 17:43

Bonjour Philippe,
Sans être un grand expert, mais à mon avis, dans le toString de ta pile, il ne devrait pas y avoir de références à des notions de JTextField, etc...

Dans ton toString, tu devrais lire ta pile dans ta boucle et ajouter à chaque fois les éléments les uns à la suite des autres.
Un peu comme un "buffer" qui va se remplir de chaque valeur de ta pile.
Pour le coup, ton objet de type pile n'est pas impacté par ton IHM.

Côté IHM,
Tu vas lire la valeur saisie dans le champ dédié à la saisie des données (via un getText) et tuvas l'empiler/dépiler.
Une fois cela réalisé, tu auras à faire un setText dans le champ qui sera justement l'affichage de ton résultat.
Tu y mettras donc le toString de ta pile. Inutile de faire une boucle puisque c'est ta Classe Pile qui le fait.

Enfin, je ne suis peut etre pas clair...

marqu_p7
Messages : 4
Inscription : 20 oct. 2020 20:44

Re: TP3 relecture objet pile

Message par marqu_p7 » 22 oct. 2020 18:26

Bonsoir,

L'intitulé de l'exercice est Pile d"objects" et " private Object[] zone; remplace private int[] zone;"

Je devrais donc avoir une espèce de sb.append(Object.toString(zone)); au lieu de sb.append(Integer.toString(zone));

Mais Object.toString(zone) ne compile pas.
Avec InstanceOf je peux savoir de quel type d'objet il s'agit pour le convertir en string. Je peux aussi le savoir avec getClass().

@favre_be, je ne souhaite pas faire de getText() dans mon IHM, car alors je sais que je transmet un String et c'est facile de l'afficher, enfin je pense.

Doit-on dans toString() essayer de convertir un Object en String?
Si je fais juste sb.append((zone).toString());

Je récupère un truc affreux = un JTextField:
javax.swing.JTextField[,5,8,64x20,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@4c266f34,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=6,columnWidth=10,command=,horizontalAlignment=LEADING]

Merci,

Philippe

marqu_p7
Messages : 4
Inscription : 20 oct. 2020 20:44

Re: TP3 relecture objet pile

Message par marqu_p7 » 22 oct. 2020 19:50

Bonsoir,

Encore moi ...

@favre_be, j'ai fait ce que tu as dis: je convertis la donnée en string et c'est ca que j'empile. Du coup je n'ai que des objets de type string dans ma pile et tout va bien. Mais je voulais envoyer la donnée brute sous forme de JTextField. Ici, on triche un peu et on envoie un type d'objet dont on sait qu'il va marcher.

Hâte de voir la correction du TP3.

Bonne soirée,
Philippe

Répondre