TP4 question 3

Programmation Avancée

Modérateur : douinj

Répondre
Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

TP4 question 3

Message par Raphael » 28 oct. 2017 18:46

Bonjour à tous :)

Je sèche un peu sur la question 3 du TP 4.

J'ai complété PileModele et controleur mais lorsque j'indique Controleur.this.pile.depiler(); dans le contrôleur, j'obtiens une erreur :
"unreported exception tp3.question3.PileVideException; must be caught or declared to be thrown"

Si vous avez des conseils, je suis preneur.

Merci

Raphael

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

Re: TP4 question 3

Message par douinj » 30 oct. 2017 14:52

bonjour,

Il vous est demandé d'installer un bloc try/catch afin éventuellement de traiter une exception qui pourrait se produire

à suivre...

donc si

Code : Tout sélectionner

void m throws Exception;{ ... }
java impose au développeur de préciser ce qui doit être fait en cas d'erreur

Code : Tout sélectionner

 try{
     m();
    ...
  }catch(Exception e){
    ....

Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

Re: TP4 question 3

Message par Raphael » 31 oct. 2017 21:14

Merci pour votre reponse

J'avais finalement identifié cette solution :) preuve que je progresse un peu !

Il me reste deux interrogations sur ce tp (enfin je crois qu'il n'en reste que deux...)

Je rencontre un souci sur la methode clear. je ne sais pas si c'est la meilleure methode mais je depile tant que la pile n'est pas vide. Si j'ai bien effectué l'analyse, ma fonction depiler notifie l'observateur puis depile. Petit soucis, ma methiode clear garde la derniere valeur à l'affichage. J'ai essayé d'inversé la fonction (je depile et je notifie) mais c'est le return que je ne parviens pas à compléter..

Le second point concerne donnee.addActionListener(null /* null est à remplacer */); pour laquelle je ne vois pas ce qu'il y a à compléter.
En comparant avec l'IHM sur le serveur du cnam, je n'ai pas identifié de différences.

Encore merci pour vos conseils,

Raphael

julien_24
Messages : 16
Inscription : 17 oct. 2017 13:41

Re: TP4 question 3

Message par julien_24 » 01 nov. 2017 9:58

Bonjour Raphael,

Pour ta première question, dans la méthode update de Vue, es ce que tu affiches l'objet qui vient d'être dépilé ou la pile?
Sinon tu peux utiliser la méthode clear() directement sur la variable d'instance PileI de PileModele (regarde Pile2 fournie, PileModele est initialise avec une Pile2 dans IHMCalculette)

Pour ta deuxième question, il faut que tu remplaces pile par une instance de classe qui implémente ActionListener.

Si tu regardes dans la classe Vue à l'ajout de l'observer au modèle il y a un indice ;-)

julien_24
Messages : 16
Inscription : 17 oct. 2017 13:41

Re: TP4 question 3

Message par julien_24 » 01 nov. 2017 10:01

Oups,

Vraiment je suis pas clair.

Pour ta deuxième question, il faut que tu remplaces "null" par une instance qui implémente ActionListener.

Désolé pour cette erreur, j'espère ne pas avoir rendu les choses plus confuses.

julien

julien_24
Messages : 16
Inscription : 17 oct. 2017 13:41

Re: TP4 question 3

Message par julien_24 » 01 nov. 2017 10:11

Bonjour Raphael,

Pour la deuxième question encore, excuses moi j'avais pas compris, en fait je crois que c'est pour permettre de lire la valeur du JTextField à l'appui de la touche Entrée, mais ici cela semble n'avoir aucun effet.

Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

Re: TP4 question 3

Message par Raphael » 01 nov. 2017 15:36

Bonjour Julien

Merci pour toutes ses precisions :)

J'affiche bien le contenu de la pile mais le souci se trouve précisement dans le fait que je notifie avant d'effectuer l'action de depiler (enfin je pense que le soucis est là..)
Si j'effectue l'action de dépiler avant de notifier, je ne parviens à mettre la valeur dans le return. Bref je ne dois pas etreb loin de la solution mais pour l'instant je galère :p

Pour la seconde question, je m'interroge vraiment sur l'utilité de le compléter par une action. Tu as probablement raison sur la lecture du jtextfield. Il s'agit peut etre de valider une valeur en lisant le jtextfiel et en le validant par entrée.

Bon courage pour la suite du tp

Raphael

bcalendreau
Messages : 40
Inscription : 07 oct. 2017 20:27

Re: TP4 question 3

Message par bcalendreau » 01 nov. 2017 22:48

Si ça peut te rassurer, j'ai simplement commenté la ligne donnee.addActionListener(null /* null est à remplacer */), je ne vois pas pour quelle raison il faudrait y mettre un listener

EDIT : c'est vrai qu'on peut en mettre un pour empiler quand l'utilisateur appuie sur la touche Entrée, même si ce n'est pas le cas de l'applette !

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

Re: TP4 question 3

Message par douinj » 02 nov. 2017 14:39

Bonjour,

Le même "listener" que pour push ...

Ce n'est pas testé côté jnews

Bonne fin de tp

Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

Re: TP4 question 3

Message par Raphael » 02 nov. 2017 22:14

Merci pour votre retour :)

Il me reste un unique soucis sur cette question.. Le soucis de notifier l'observateur avant de dépiler et je ne parviens pas à m'en sortir.
setChanged();
notifyObservers();
return this.pile.depiler();

Normalement, il faudrait dépiler puis notifier mais ensuite je ne parviens pas à compléter le return.

J'ai repris le cours mais impossible de trouver une solution.

Merci de votre aide

pthellier
Messages : 29
Inscription : 10 oct. 2017 13:52

Re: TP4 question 3

Message par pthellier » 02 nov. 2017 23:07

Dépile dans une variable ce qui te permet de notifier et de faire le return.

Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

Re: TP4 question 3

Message par Raphael » 03 nov. 2017 12:46

Merci pthellier :)
C'est bien ce que j'essayais de faire mais je n'y parvenais pas.

J'ai enfin trouvé le moyen de dépiler avant de notifier.

Merci à tous pour vos conseils.

Raphael

Répondre