Correction contrôle final

publicité
Correction
Question 1
Classe Personne :
package eg.ufe.gestion;
/**
* Une personne.
*/
public class Personne {
private int id;
private String nom;
private String sexe;
private static int numPrecedent;
public Personne(String nom, String sexe) {
this.nom = nom;
if (! (sexe.equals("H") || sexe.equals("F"))) {
throw new IllegalArgumentException("Le sexe doit être égal à 'H' ou 'F'");
}
this.sexe = sexe;
this.id = ++numPrecedent;
}
public String getNom() {
return nom;
}
public int getId() {
return id;
}
public String getSexe() {
return sexe;
}
}
@Override
public String toString() {
return "Personne{" + "id=" + id + ", nom=" + nom + ", sexe=" + sexe + '}';
}
Question 2
package eg.ufe.gestion;
public class Main {
public static void main(String[] args) {
Personne mohamed = new Personne("Mohamed", "H");
Personne sarah = new Personne("Sarah", "F");
System.out.println(mohamed.getNom() + " et "
+ sarah.getNom() + " sont 2 personnes");
}
}
Question 3
package eg.ufe.gestion.universite;
4
import eg.ufe.gestion.Personne;
/**
* Un étudiant.
*/
public class Etudiant extends Personne {
private double moyenne;
public Etudiant(String nom, String sexe, double moyenne) {
super(nom, sexe);
this.moyenne = moyenne;
}
public double getMoyenne() {
return moyenne;
}
@Override
public String toString() {
return "Etudiant{" + "id=" + this.getId() + ", nom=" + this.getNom()
+ ", sexe=" + this.getSexe() + ", moyenne=" + moyenne + '}';
}
}
package eg.ufe.gestion.universite;
import eg.ufe.gestion.Personne;
import java.util.List;
/**
* Un enseignant.
*/
public class Enseignant extends Personne {
private List<String> matieresEnseignees = new ArrayList<>();
public Enseignant(String nom, String sexe) {
super(nom, sexe);
}
}
@Override
public String toString() {
return "Enseignant{" + "id=" + this.getId() + ", nom=" + this.getNom()
+ ", sexe=" + this.getSexe()
+ "matieresEnseignees=" + matieresEnseignees + '}';
}
Question 4
import java.util.ArrayList;
import java.util.Iterator;
...
public void ajouterMatiere(String matiere) {
if (matieresEnseignees.contains(matiere)) {
throw new IllegalArgumentException("Matière déjà enregistrée");
}
matieresEnseignees.add(matiere);
}
public Iterator<String> iterateurMatieres() {
5
return matieresEnseignees.iterator();
}
On aurait pu remplacer List par Set, ce qui aurait évité d’avoir à chercher si la matière était déjà
enregistrée.
Question 5
package eg.ufe.gestion.universite;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
Enseignant e = new Enseignant("Mohamed", "H");
e.ajouterMatiere("Informatique");
e.ajouterMatiere("Gestion");
Iterator<String> it = e.iterateurMatieres();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
Question 6
public static String meilleureEtudiante(List<Etudiant> etudiants) {
String result = null;
double max = -1.0;
for (Etudiant etudiant : etudiants) {
if (etudiant.getSexe().equals("F")) {
if (etudiant.getMoyenne() > max) { // peut être réuni avec test précédent
max = etudiant.getMoyenne();
result = etudiant.getNom();
}
}
}
return result;
}
public static String meilleureEtudianteLambda(List<Etudiant> etudiants) {
return etudiants.stream().filter(e -> e.getSexe().equals("F"))
.max(Comparator.comparing(e -> e.getMoyenne()))
.get().getNom();
}
Question 7
La méthode meilleureEtudianteLambda ne peut pas recevoir un paramètre de type
List<EtudiantAvecMaster> car ce type n’est pas un sous-type de List<Etudiant>
(voir cours sur la généricité).
Pour améliorer la méthode meilleureEtudianteLambda il suffit de mettre le type du
paramètre à List<? extends Etudiant> au lieu de List<Etudiant>.
6
Téléchargement