Page 2 sur 2

Re: TP3 question 2_2

Publié : 20 oct. 2018 20:22
par RENAUD
ça devrait mais ça dépend comment tu a codé empile finalement mais ce serait une file LIFO !
moi par contre j'utilise pas clone() j'ai cherché à le placer dans depile pas réussi à obtenir ce que je voulais sans remanier tous les tests d'origines.
donc dans empile je fait un stk=new maillon (o,stk) et dans depile un stk= stk.suivant comme stk est null au départ y'a toujours un suivant null

Re: TP3 question 2_2

Publié : 21 oct. 2018 0:58
par Timonnier
Bonjour à tous,

je suis aussi bloqué au même test que certains :
1) test_equals_contenu_different(question2): une pile2 d''entiers(1,2,3) == une pile2 de String("1","2","3") ???
Je n'arrive pas à trouver de solution pour différencier une pile d'entier, d'une pile de String.
J'ai pensé au Hashcode mais à priori ils aurait le même.

Auriez-vous des indications pour m'aiguiller à ce sujet?

Je vous remercie d'avance.

Re: TP3 question 2_2

Publié : 21 oct. 2018 21:44
par avidal
Bonjour,

Idem que beaucoup, tp3q2 :
There was 1 failure:
1) test_equals_contenu_different(question2): une pile d'entiers(1,2,3) == une pile de String("1","2","3") ???
Localement tous les tests passent, et je n'ai pas vu dans l'énoncé que le retour doit être différent pour des Integer ou des String.

Bon courage, et merci à celui qui trouve la réponse :)

Je continue de mon coté à creuser un peu...

Re: TP3 question 2_2

Publié : 21 oct. 2018 22:50
par avidal
Re-Bonsoir,

Bon j'ai trouvé une méthode pour passer les tests, je les ai peut être un peu contournés ...

Dans l'interface PileI j'ai ajouté la méthode suivante :

Code : Tout sélectionner

public boolean asInteger();
Puis dans chaque implémentation, cette méthode ressemble à cela (ici Pile1) :

Code : Tout sélectionner

public boolean asInteger() {
    boolean bool = false;
    // Parse la pile pour vérifier si il existe des Integer
    for(Object s : zone) {
        if(s instanceof Integer) {
            bool = true;
        }
    }
    return bool;
}
Et enfin, dans l’implémentation des méthodes equals(), j'ai ajouté un test sur cette nouvelle méthode :

Code : Tout sélectionner

public boolean equals(Object o) {
    if (o instanceof PileI) {
        PileI p = (PileI) o;
        return this.capacite() == p.capacite()
        && this.hashCode() == p.hashCode()
        && this.asInteger() == p.asInteger();
    } else {
        return false;
    }
}
Il reste l'implémentation à faire de la méthode asInteger() pour les autres piles, ça devrait aller vite avec toString().

Bon courage.

Alban

Re: TP3 question 2_2

Publié : 22 oct. 2018 1:10
par RENAUD
Avec le test sur le retour de depiler cela aurait du suffire.
Le code que m'a proposé jnews confirme l'égalité sur l'ensemble de la pile alors qu'un element retourné par depiler étant object, il y a bien la différence entre un integer et un string.

Personnellement j'aurais tendance à dire que la signature de pile est différente de chaque element qu'elle contient. Si depiler renvoie un object et que assertequals fait la difference du type d'origine alors soit les elements "s'organisent" en mémoire dans la pile pour être egal à une pile de string finalement en sortie, soit c'est autre chose. Je n'ai pas pensé à comparer, ni regarder la "somme" des hashcode de chaque element et le hascode de la pile, peut-être qu'ils sont cote à cote en mémoire?

En tout cas je ne comprend pas pourquoi jnews refuse plusieurs tests que j'ai soumis (je n'ai pas essayé avec le simple code qu'il m'a proposé) alors que j'ai juste rajouter deux trois assertequals pour depiler.

Mais à moins d'une réponse qui me dirait que depiler n'a strictement rien à voir réellement avec l'element que contient la pile, je suis au TP4 et j'ai vraiment du mal à piger la calculatrice MVC donc j'ai abandonné pour l'instant.
J'ai juste vu un blog que j'ai trouvé intéressant, qui m'a bien aidé, même si je n'ai pas approfondi et tout compris encore ce qu'il écrivait :
https://www.infoq.com/fr/articles/retou ... t-hashcode
Bonne nuit !

Re: TP3 question 2_2

Publié : 22 oct. 2018 15:19
par Gilles_OLLIVIER
Bonjour,
Dans la question 2.1, on doit compléter la classe Pile pour ajouter les méthodes de l'interface PileI.
Dans la question 2.2, on nous demande de soumettre un code pour pile en utilisant Pile de la question 1.
Cela veut donc dire qu'il faut supprimer le code de Pile de la question 2.1 pour le remplacer par la nouvelle solution.
Etant donné que Pile de la question 1 n'a pas les méthodes sommet et equals, ils faut recréer ces 2 méthode avec seulement les methodes empiler et depiler.

Ou alors on garde le code de la questrion 2.1 pour Pile ?

En ce qui me concerne, j'ai fais les 2, et toutes les 2 sont validées par jnew. Alors quelle dois-je rendre? La solution dela question 2.1 ou celle de la solution 2.2 ?

J'ai envoyé un mail dans la nuit au prof, je n'ai pas de réponse.

Merci par avance