Comparaison d'objet, redifinition de equals

Résolu
Signaler
Messages postés
19
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
30 octobre 2012
-
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
-
Bonsoir, voici mon code :

public class DGElement implements Comparable<DGElement>{
public int min;
public int max;
public String chemin;
public DGElement(String chemin){
this.min=0;
this.max=0;
this.chemin=chemin;
}
public void incMax(){
this.max=this.max+1;
}
public void setMin(int min){
this.min=min;
}
public int getMin(){
return min;
}
public void setMax(int max){
this.max=max;
}
public void setChemin(String chemin){
this.chemin=chemin;
}
public void afficher(){
System.out.println("le chemin :"+chemin+" le min:"+min+" le max:"+max);
}

public boolean equals(DGElement o){
return ((((DGElement) o).chemin).equals(this.chemin));
}

public int compareTo(DGElement o) {

String S=((DGElement) o).chemin;
String S2=this.chemin;

if (S.equals(S2)) {
return 0;
}
else{
return 1;
}
}
}
et j'ai une deusieme classe dans la quelle j'ai implementé cette methode:
public boolean verifierChemin(String path,Vector<DGElement> vecteurDGE) throws Exception{
DGElement elementcomparer=new DGElement(path);
if((vecteurDGE.contains(elementcomparer))){
return true;
}
else{
return false;
}

}
dans cette methode je verifier s'il existe un DGElement a le meme chemin
mais le resultat est toujours false pourtant j'ai redéfinie equals et le compareTo.Un aide svp merci d'avance.

5 réponses

Messages postés
19
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
30 octobre 2012

Merci pour votre réponse ,je vient de trouver la solution :a chaque fois on redéfinie equals on doit redéfinir avec la méthode hashcode et voici la redéfinition pour mon problème :
Public int hashcode(){
Return this.chemin.hashcode() ;
}
Bonne nuits
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Bonjour,

Commence déjà par remplacer ta fonction verifierChemin par :

public boolean verifierChemin(String path,Vector<DGElement> vecteurDGE) throws Exception{ 
   return vecteurDGE.contains(elementcomparer);
} 


et ta fonction equals par :

public boolean equals(DGElement o){ 
   return o.chemin.equals(this.chemin); 
} 


La méthode contains utilise la méthode equals, donc, ton code fonctionne je pense, es tu cetain que ton vecteur contient bien l'élément que tu souhaites rechercher ? Je dirais que tu n'as pas ajouté l'élement que tu recherches...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Et tu peux également remplacer ta fernière méthode par ca :


public boolean verifierChemin(String path,Vector<DGElement> vecteurDGE) throws Exception{ 
   DGElement elementcomparer=new DGElement(path);
   // vecteurDGE.addElement(elementcomparer);
   return vecteurDGE.contains(elementcomparer); 
} 


Si tu décommentes la ligne, normalement, ta fonction renverra true, sinon, il y a quelque chose qui m'échappe.

Pense à mettre ton sujet "résolu" stp.
Et à l'avenir, pense plutôt à redéfinir la méthode compareTo() car comme tu l'as vu, al redéfinition de equals() implique celle de hashCode() et il est très complexe de redéfinir proprement hashCode.


--
Pylouq
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
J'accepte la réponse à ta place, essaye d'y penser la prochaine fois.