OVH Cloud OVH Cloud

[Debutant] Probleme avec search() de Stack

2 réponses
Avatar
Delf
Bonjour, je suis confronté à un petit problème.
J'ai une class Process et une class maStack

Dans le main() de maStack j'ai cette partie de code:

...
Process T1 = new Process(1, "init");
aStack.push(T1);
...

/* Retourne -1: non trouvé */
System.out.println(aStack.search(new Process(1, "init")));

/* Retourne NB >= 0 */
System.out.println(aStack.search(T1));

Pourquoi la premiere recherche ne trouve pas l'objet ?
Merci anticipé.

--
Delf

2 réponses

Avatar
steph

Bonjour, je suis confronté à un petit problème.
J'ai une class Process et une class maStack

Dans le main() de maStack j'ai cette partie de code:

....
Process T1 = new Process(1, "init");
aStack.push(T1);
....

/* Retourne -1: non trouvé */
System.out.println(aStack.search(new Process(1, "init")));

/* Retourne NB >= 0 */
System.out.println(aStack.search(T1));

Pourquoi la premiere recherche ne trouve pas l'objet ?


La méthoode search() utilise la methode equals():
elle parcourt les objects de la pile et fait un
lObjet.equals(monObjectRecherche) pour chacun jusqu'à ce que true soit renvoyé
ou que toute la pile est été parcourrue.

Par défaut la methode equals compare les ID des objets (lié à son emplacement en
mémoire):

public boolean equals(Object obj)
{
return (this == obj);
}



Pour que ta première recherche fonctionne, la classe Process doit implémenter
(surcharger) la methode equals:

public boolean equals(Object obj)
{
boolean returned = false;
if (obj instance of this.class)
{
returned = (att1 == obj.att1) && (att2.equals(obj.att2);
}
return returned;
}
en supposant que ton constructeur Process(1, "init") renseigne les deux
attributs att1 et att2.





Merci anticipé.

--
Delf


--
stephane
retirez les lettres majuscules et le 666 de l'adresse pour l'utiliser.

Avatar
Delf
steph wrote:

Pour que ta première recherche fonctionne, la classe Process doit
implémenter (surcharger) la methode equals:

public boolean equals(Object obj)
{
boolean returned = false;
if (obj instance of this.class)
{
returned = (att1 == obj.att1) && (att2.equals(obj.att2);
}
return returned;
}
en supposant que ton constructeur Process(1, "init") renseigne les deux
attributs att1 et att2.


Je m'étais justement posé la question qu'il était nécessaire de
surcharger une méthode... mais ne sachant pas laquelle.
Merci.

--
Delf