Vous êtes sur la page 1sur 8

TD 1 : Les Collections

Exercice 1

1. Ecrire une classe Employe ayant les attributs privés et les méthodes publiques
suivantes :
 nom (chaine) et salaire (int)
 un constructeur qui initialise les deux attributs
 un accesseur et un modificateur pour l'attribut nom
 un accesseur et un modificateur pour l'attribut salaire
 une méthode toString() qui retourne une chaine de caractère décrivant l'employé
(son nom et salaire).
2. Soit la classe NomComp suivante :

class NomComp implements Comparator<Employe>{


@Override
public int compare(Employe e1, Employe e2) {
return e1.getNom().compareTo(e2.getNom());
}

Ecrire une autre classe SalaireComp similaire à NomComp, dans laquelle on compare deux
employés selon leur salaire.

3. Ecrire une classe ExempleComparator qui contient une méthode main, dans laquelle :
a)
 Créez un TreeSet ts1 en utilisant le comparateur pour le nom.
 Créez et ajoutez 4 employés dans le TreeSet ts1.
 Utilisez une boucle foreach pour afficher les éléments de ts1.
b)
 Créez un TreeSet ts2 en utilisant le comparateur pour le salaire.
 Créez et ajoutez 4 employés dans le TreeSet ts2.
 Utilisez une boucle foreach pour afficher les éléments de ts2.

c) Quel est le résultat de l'exécution ? Quelle est la différence entre les deux affichages ?

Mr. Mohamed Salah MEDDEB RSI21 1


import java.util.Comparator;
import java.util.TreeSet;

class Employe {

private String nom;


private int salaire;

public Employe(String n, int s) {


this.nom = n;
this.salaire = s;
}

public String getNom() { return nom; }

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

public int getSalaire() { return salaire; }

public void setSalaire(int salaire) { this.salaire = salaire; }

public String toString() {


return this.nom + " -- salaire: " + this.salaire;
}
}

class NomComp implements Comparator<Employe> {

@Override
public int compare(Employe e1, Employe e2) {
return e1.getNom().compareTo(e2.getNom());
}
}

class SalaireComp implements Comparator<Employe> {


@Override
public int compare(Employe e1, Employe e2) {
if (e1.getSalaire() > e2.getSalaire()) {
return 1;
} else {
return -1;
}
}
}

Mr. Mohamed Salah MEDDEB RSI21 2


public class ExempleComparator {

public static void main(String args[]) {


//En utilisant le comparator du nom (comparaison selon String)
TreeSet<Employe> ts1 = new TreeSet(new NomComp());
ts1.add(new Employe("Ramzi", 3000));
ts1.add(new Employe("Jihene", 1000));
ts1.add(new Employe("Chadia", 2000));
ts1.add(new Employe("Sami", 2400));
for (Employe e : ts1) {
System.out.println(e);
}
System.out.println("===========================");
//En utilisant le comparator du salaire (comparaison selon int)
TreeSet<Employe> ts2 = new TreeSet<Employe>(new SalaireComp());
ts2.add(new Employe("Ramzi", 3000));
ts2.add(new Employe("Jihene", 1000));
ts2.add(new Employe("Chadia", 2000));
ts2.add(new Employe("Sami", 2400));
for (Employe e : ts2) {
System.out.println(e);
}
}
}

Exercice 2 :

On considère un centre de formation qui délivre des cours par groupes d'étudiants.

1. Une formation est caractérisée par un identifiant (String) et une liste des différentes
matières qui y sont enseignées associées à leurs coefficients. On veut pouvoir ajouter et
supprimer une matière dans une formation, ainsi que connaître le coefficient d'une
matière. Ecrire la classe Formation en y définissant un constructeur Formation (String
idF) et une méthode decrireForm() qui affiche l'identifiant d'une formation suivi de la
liste des matières avec leurs coefficients.

2. Un étudiant est défini par son numéro d'inscription, son nom, prénom, sa moyenne
générale et sa formation. Ecrire la classe Etudiant en ajoutant un constructeur Etudiant
(int num, String nom, String prenom, Formation form). Définir une méthode
toString(),un accesseur pour chacun des attributs nom et moyenne générale et un
modificateur setMoy() qui calcule la moyenne générale d'un étudiant en saisissant au
clavier ses notes dans les différentes matières de sa formation.

Mr. Mohamed Salah MEDDEB RSI21 3


3. Un groupe d'étudiants est caractérisé par son identifiant, la liste des différents
étudiants qui le composent et la formation à laquelle ce groupe appartient. Ecrire la
classe Groupe ayant un constructeur Groupe(String idG, Formation f) et sachant que
l'on doit pouvoir ajouter et supprimer un étudiant au groupe, ainsi que calculer la
moyenne générale du groupe. Ajouter une méthode afficherGroupe() permettant
d'afficher l'identifiant d'un groupe, sa formation ainsi que la liste des étudiants.

Mr. Mohamed Salah MEDDEB RSI21 4


La classe Formation
package testformation;
import java.util.Map;
import java.util.HashMap;

public class Formation {

private int idF;


public Map listeMat;

public Formation(int i) {
idF = i;
listeMat = new HashMap();
}

public void ajouterMat(String m, float c) {


listeMat.put(m, new Float(c));
}

public void supprimerMat(String m) {


listeMat.remove(m);
}

public float getCoef(String m) {


Float c = (Float) listeMat.get(m);
return c.floatValue();
}

public void decrireForm() {


System.out.println("Formation " + idF + "\nMatière | Coef");
for (Object k : listeMat.keySet()) {
System.out.println(k + " => " + listeMat.get(k));
}
}
}

La classe Etudiant

package testformation;

import java.util.*;

public class Etudiant {

int ni;
String nom, prenom;
float moyGen;
Formation form;

Mr. Mohamed Salah MEDDEB RSI21 5


public Etudiant(int num, String nom, String prenom, Formation form) {
ni = num;
this.nom = nom;
this.prenom = prenom;
this.form = form;
}

public String getNom() {


return (nom);
}

public float getMoyGen() {


return (moyGen);
}

public String toString() {


return ni + ":" + nom + " " + prenom + " => " + moyGen;
}

public void setMoyGen() {


float total = 0, totCoef = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Etudiant " + nom + " " + prenom);
for (Object k : form.listeMat.keySet()) {
System.out.println("Saisir la note en " + k + ":");
float n = sc.nextFloat();
Float coef = (Float) form.listeMat.get(k);
totCoef += coef.floatValue();
total += n * coef.floatValue();
}
moyGen = total / totCoef;
}
}

La classe Groupe
package testformation;

import java.util.*;

public class Groupe {

String idG;
Formation groupForm;
Set listeEtud;

public Groupe(String idG, Formation f) {


this.idG = idG;
groupForm = f;
listeEtud = new HashSet();
}

Mr. Mohamed Salah MEDDEB RSI21 6


public void ajouterEtudiant(Etudiant e) {
listeEtud.add(e);
}

public void supprimerEtudiant(Etudiant e) {


listeEtud.remove(e);
}

public float moyGroup() {


float moyG = 0;
Iterator it = listeEtud.iterator();
while (it.hasNext()) {
Etudiant e = (Etudiant) it.next();
moyG += e.getMoyGen() / listeEtud.size();
}
return moyG;
}

public void afficheGroupe() {


System.out.println("\n\nGroupe " + idG);
groupForm.decrireForm();
Iterator it = listeEtud.iterator();
System.out.println("\nListe des étudiants par nom :");
while (it.hasNext()) {
Etudiant e = (Etudiant) it.next();
System.out.println(e.toString());
}
}
}

La classe TestFormation

package testformation;

public class TestFormation {

public static void main(String args[]) {


Formation f1 = new Formation(101);
f1.ajouterMat("POO", 4);
f1.ajouterMat("UML", 3);
f1.ajouterMat("XML", 2);
Etudiant e1 = new Etudiant(10001, "Ben saleh", "Mourad", f1);
e1.setMoyGen();
Etudiant e2 = new Etudiant(10002, "Heni", "Maha", f1);
e2.setMoyGen();
Etudiant e3 = new Etudiant(10003, "Kamel", "Souad", f1);
e3.setMoyGen();
Groupe g1 = new Groupe("DSI2", f1);
g1.ajouterEtudiant(e1);
g1.ajouterEtudiant(e1);
g1.ajouterEtudiant(e2);

Mr. Mohamed Salah MEDDEB RSI21 7


g1.ajouterEtudiant(e3);
g1.afficheGroupe();
//g1.triNom();
System.out.println("La moyenne du groupe = " + g1.moyGroup());
//g1.triMerite();
}

Mr. Mohamed Salah MEDDEB RSI21 8