Mon tp [Résolu]

- 20 mars 2013 à 01:24 - Dernière réponse :  boobaite
- 20 mars 2013 à 23:11
salut mes amis, j'ai ce projet JAVA qui me prend toute ma journée.. je suis debutante et je passerai ce tp comme DS! alors je souhaite que vous m'aidez!

L'objectif de ce TP est de nous familiariser avec les notions d'Interface et de structures de données avancées (qu'on va chercher leurs APIs sur le net).

la 1ere partie, etait d'ecrire une classe etudiant avec ses constructeurs.. et tous ce travail de getters et setters que j'ai fais sans probleme!
une autre question est:la redéfinition de la méthode méthode boolean equals(Etudiant e), permettant de tester l'égalité entre 2 étudiants.

c'est cette methode que je trouve des problemes à l'ecrire! svp aidez moi :)

le tp est encore long mais je ne veux pas vous ennuiyer avec mes questions de debutante
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 20 mars 2013 à 08:47
3
Merci
Salut,

Je vais commencer par déplacer ca vers le forum java

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Julien39
Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 20 mars 2013 à 08:48
3
Merci
Peux tu nous montrer ce que tu as fait et nous expliquer ce qui te poses problème pour avancer ?

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Julien39
Meilleure réponse
3
Merci
voilà ma classe "Etudiant" , je l'ai écrit (clic droit sur ma classe > "source" > ...) ça veut dire que j'ai pratiquement rien fait, c eclipse qui a tout fait! et c'est pas le but de mon apprentissage en java!

je ne comprend pas cette notion de hashcode et je ne sais pas comment faire la compilation de mon programme!

euuh j'ai oublier d'ecrire la classe main! là voilà:
 package sadok;

public class Main {


public static void main(String[] args) {
Etudiant e1= new Etudiant ("nom1", "prenom1");
Etudiant e2= new Etudiant ("nom2", "prenom2");

}

}
 

Merci boobaite 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de boobaite
Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 20 mars 2013 à 11:01
3
Merci
Tout a l'air bon, je ne vois pas ce qui te poses problème. Juste un conseil :
private String nom;
private String prenom;

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Julien39
0
Merci
package sadok;

public class Etudiant {
String nom;
String prenom;


public Etudiant() {

}

public Etudiant(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}

public String getNom() {
return nom;
}

public void setNom(String nom) {
this.nom = nom;
}

public String getPrenom() {
return prenom;
}

public void setPrenom(String prenom) {
this.prenom = prenom;
}


public String toString (){
return "Etudiant{" + "nom=" +nom+ ",prenom=" +prenom+ '}';
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result prime * result + ((nom null) ? 0 : nom.hashCode());
result prime * result + ((prenom null) ? 0 : prenom.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Etudiant other = (Etudiant) obj;
if (nom == null) {
if (other.nom != null)
return false;
} else if (!nom.equals(other.nom))
return false;
if (prenom == null) {
if (other.prenom != null)
return false;
} else if (!prenom.equals(other.prenom))
return false;
return true;
}





}
Commenter la réponse de boobaite
0
Merci
j'ai trouvé sur net ce code:
public boolean equals(Object o) {
    if(!o instanceof Etudiant) return false;
    Etudiant s = (Etudiant)o;
    return o.name.equals(this.name);
}
Etudiant s = new Etudiant();
Etudiant t = new Etudiant();
boolean e (s t); // always false
boolean q = s.equals(t);
Commenter la réponse de boobaite
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 20 mars 2013 à 11:02
0
Merci
C'est normal; == compare les références, c'est ta méthode equals qu'il faudra appeler et pas == dans ce cas là
Commenter la réponse de cs_Julien39
0
Merci
mm je sais bien que le code est correct! mais je ne le comprend pas! pourquoi on a ecrit le hashcode et à quoi ça sert! aussi "override"??
vs voyez en examen on ecrit les codes java sur feuille et pas sur eclipse qui facilite toutes les tâches !

aussi la compilation! j'appuie sur RUN pour compiler, j'ai expecté que je vais entrer les infos de 2 etudiants et les comparer.. mais rien n'est affiché au cours de la compilation
Commenter la réponse de boobaite
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 20 mars 2013 à 11:45
0
Merci
@Override est une annotation qui signifie que tu ré implémentes une méthode de la classe mère (dans le cas présent Object).

hashCode est la fonction que tu ré-implémentes avec equals pour pourvoir calculer un hash de ton objet et comparer deux objets a l'aide de ce hash.
Commenter la réponse de cs_Julien39
Messages postés
719
Date d'inscription
lundi 5 décembre 2005
Dernière intervention
8 janvier 2014
- 20 mars 2013 à 11:58
0
Merci
Une explication ici :

http://java.developpez.com/faq/java/?page=divers#DIVERS_equals

et là :

http://java.developpez.com/faq/java/?page=divers#DIVERS_hashCode

en gros :

Si x.equals(y), alors x.hashCode() == y.hashCode()

La raison est que lorsque, pour une classe, on redéfinit equals(), il est recommandé de redéfinir hashCode().
Ces deux méthodes sont intimement liés pour valider l'égalité de deux instances d'une même classe. Si on redéfini l'une sans l'autre, on brise la règle d'intégrité d'une égalité en Java.
Les deux méthodes doivent utiliser les mêmes propriétés de deux instances pour retourner la même valeur (deux hashCode sur deux instances différentes d'une même classe doivent effectuer leur calcul sur les mêmes propriétés qui sont utilisées dans la méthode equals)

un exemple :

public class Emp {

private int age;

public Emp(int age) {
super();
this.age = age;
}

public int hashCode() {
return age;
}

public boolean equals(Object obj) {
boolean flag = false;
Emp emp = (Emp) obj;
if (emp.age == age)
flag = true;
return flag;
}

/**
 * @param args
 */
public static void main(String[] args) {
Emp emp1 = new Emp(23);
Emp emp2 = new Emp(24);
Emp emp3 = new Emp(25);
Emp emp4 = new Emp(26);
Emp emp5 = new Emp(27);
HashSet hs = new HashSet();
hs.add(emp1);
hs.add(emp2);
hs.add(emp3);
hs.add(emp4);
hs.add(emp5);

System.out.println("HashSet Size--->>>"+hs.size());
System.out.println("hs.contains( new Emp(25))--->>>"+hs.contains(new Emp(25)));
System.out.println("hs.remove( new Emp(24)--->>>"+hs.remove( new Emp(24)));
System.out.println("Now HashSet Size--->>>"+hs.size());
}

}


Exécuté tel quel cela donne :

HashSet Size--->>>5
hs.contains( new Emp(25))--->>>true
hs.remove( new Emp(24)--->>>true
Now HashSet Size--->>>4

Si vous commentez la méthode hashCode, la méthode equals ou les deux vous aurez :

HashSet Size--->>>5
hs.contains( new Emp(25))--->>>false
hs.remove( new Emp(24)--->>>false
Now HashSet Size--->>>5
Commenter la réponse de cs_AlexN
Commenter la réponse de boobaite

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.