Comparaison d'objet, redifinition de equals

Résolu
cs_tamalgo Messages postés 19 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 30 octobre 2012 - 14 oct. 2011 à 19:23
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 26 oct. 2011 à 07:55
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

cs_tamalgo Messages postés 19 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 30 octobre 2012
14 oct. 2011 à 23:39
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
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
14 oct. 2011 à 21:33
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...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
14 oct. 2011 à 21:35
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.
0
Utilisateur anonyme
15 oct. 2011 à 19:18
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
26 oct. 2011 à 07:55
J'accepte la réponse à ta place, essaye d'y penser la prochaine fois.
0