Java: Correction Etudiant, Scolarité et Promotion

Voici une correction donnée par Nicolas Raynaud :

Etudiant.java

import java.util.ArrayList;
import java.util.Iterator;
public class Etudiant implements Cloneable {
    private String nom, prenom;
    private int age;
    private ArrayList notes = new ArrayList();
    
    public Etudiant(String _nom, String _prenom, int _age) {
        nom = _nom;
        prenom = _prenom;
        age = _age;
    }
    public String getNom() {
        return nom;
    }
    public String getPrenom() {
        return prenom;
    }
    public int getAge() {
        return age;
    }
    public int [] getNotes() {
        // On fait une copie pour protéger la variable membre
        int [] buf = new int [notes.size()];
        int i;
        Iterator it;
        
        for (it = notes.iterator(), i = 0; it.hasNext(); i++) {
            Integer n = (Integer) it.next();
            
            buf[i] = n.intValue();
        }
        return buf;
    }
    public void setAge(int _age) {
        age = _age;
    }
    public void setNom(String _nom) {
        nom = _nom;
    }
    public void setPrenom(String _prenom) {
        prenom = _prenom;
    }
    public void ajouterNote(int _note) {
        notes.add(new Integer(_note));
    }
    public String toString() {
        StringBuffer sb = new StringBuffer();
        int i;
        Iterator it;
        
        sb.append("Etudiant (" + nom + ", " + prenom + ", " + age + ", notes[");
        for (it = notes.iterator(), i = 0; it.hasNext(); i++) {
            Integer n = (Integer) it.next();
            sb.append(n.toString());
            if (i < notes.size() - 1) {
                sb.append(",");
            }
        }
        sb.append("])");
        return sb.toString();
    }
    public double moyenne() {
        double sum = 0.0;
        
        for (Iterator it = notes.iterator(); it.hasNext();) {
            Integer n = (Integer) it.next();
            sum += n.doubleValue();
        }
        return sum/notes.size();
    }
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError();
        }
    }
}

Promotion.java

/**
 *
 * @author  Nicolas Raynaud
 * @version 
 */
 
import java.util.ArrayList;
import java.util.Iterator;
 
public class Promotion extends java.lang.Object {
 
    private ArrayList etudiants = new ArrayList();
    
    private String nom = "sans nom";
    
    /** Creates new Promotion */
    public Promotion(String n) {
        nom = n;
    }
 
    public java.lang.String toString() {
        StringBuffer s = new StringBuffer();
        double sum = 0;
        s.append(nom.toString());
        s.append(":\n");
        for (Iterator it = etudiants.iterator(); it.hasNext();) {
            Etudiant e = (Etudiant) it.next();
                
            s.append(e.toString());
            s.append("\n");
            sum += e.moyenne();
        }
        s.append("moyenne : ");
        s.append(sum/etudiants.size());
        s.append("\n");
        return s.toString();
    }
    public void addEtudiant(Etudiant e) {
       etudiants.add(e);
    }
    public void removeEtudiant(Etudiant e) {
        etudiants.remove(e);
    }
    public String getNom() {
        return nom;
    }
    public boolean contains(Etudiant e) {
        return etudiants.contains(e);
    }
    public Etudiant etudiantByName(String nomEtudiant) {
        for (Iterator it = etudiants.iterator(); it.hasNext();) {
            Etudiant e = (Etudiant) it.next();
            
            if (e.getNom() == nomEtudiant)
                return e;
        }
        return null;
    }
    public boolean contains(String n) {
        return etudiantByName(n) != null;
    }
}
 

Scolarite.java

/**
 *
 * @author Nicolas Raynaud
 * @version 
 */
import java.util.ArrayList;
import java.util.Iterator;
 
 
public class Scolarite extends java.lang.Object {
 
    private ArrayList promotions = new ArrayList(2);
    
    private int annee;
    
    /** Creates new Scolarite */
    public Scolarite(int _annee) {
        annee = _annee;
    }
 
    public java.lang.String toString() {
        StringBuffer s = new StringBuffer();
        
        s.append(annee + ":\n\n");
        
        for (Iterator it = promotions.iterator(); it.hasNext();) {
            Promotion p = (Promotion) it.next();
            
            s.append(p.toString());
        }
        return s.toString();
    }
    
    public void addPromotion(Promotion p) {
        promotions.add(p);
    }
    
    public void removePromotion(Promotion p) {
        promotions.remove(p);
    }
    
    public int getAnnee() {
        return annee;
    }
    
    public Promotion findPromotion(Etudiant e) {
        for (Iterator it = promotions.iterator(); it.hasNext();) {
            Promotion p = (Promotion) it.next();
            
            if (p.contains(e))
                return p;
        }
        return null;
    }
    
    public Promotion findPromotion(String nomEtudiant) {
        for (Iterator it = promotions.iterator(); it.hasNext();) {
            Promotion p = (Promotion) it.next();
            
            if (p.contains(nomEtudiant))
                return p;
        }
        return null;
    }
    public Etudiant etudiantByName(String n) {
        for (Iterator it = promotions.iterator(); it.hasNext();) {
            Promotion p = (Promotion) it.next();
            Etudiant e = p.etudiantByName(n);
            
            if(e != null)
                return e;
        }
        return null;
 
    }
}
 

TestEtudiant.java

import java.util.*;
import Etudiant;
 
class TestEtudiant {
    static int [][] toutesNotes = {
{12,13,14,9,14},
{2,3,4,8,1},
{10,19,12,9,14},
{19,19,17,6,12}
    };
 
    public static void main(String argv[]) {
Etudiant tabet[] = {
   new Etudiant("Jojo","Emile", 12), 
   new Etudiant("Aructule","George", 13),
   new Etudiant("Picotobax", "Rose", 23),
   new Etudiant("Moulemole", "Arthur", 11)
};
 
// On affecte quelques notes
for (int et = 0; et < tabet.length; et++) {
   for (int not = 0; not < toutesNotes[et].length; not++) {
tabet[et].ajouterNote(toutesNotes[et][not]);
   }
}
 
// Afficher la liste des notes de chaque etudiant
// calcule les moyennes
int moyenneGenerale = 0;
for (int et = 0; et < tabet.length; et++) {
   int [] notes = tabet[et].getNotes();
   int cumnotes = 0;
   StringBuffer sbnotes = new StringBuffer(tabet[et].getNom() + " [");
   for (int not = 0; not < notes.length; not++) {
cumnotes += notes[not];
sbnotes.append("" + notes[not]);
if (not < notes.length - 1) {
   sbnotes.append(" ");
}
   }
   moyenneGenerale += cumnotes/notes.length;
   sbnotes.append("] moyenne == " + cumnotes/notes.length);
   System.out.println(sbnotes);
}
moyenneGenerale /= tabet.length;
System.out.println("Moyenne générale : " + moyenneGenerale);
 
// Affichage de tous les etudiants (en utilisant indirectement toString())
System.out.println("");
System.out.println("La classe :");
for (int et = 0; et < tabet.length; et++) {
   System.out.println(tabet[et]);
   System.out.println(tabet[et].clone());
}
    }
}
 

TestScolarite.java

/**
 *
 * @author  Nicolas Raynaud
 * @version 
 */
 
public class TestScolarite {
    public static void main(String argv[]) {
        Etudiant e1[] = {
            new Etudiant("e11", "e2", 10), 
            new Etudiant("e12", "e2", 10), 
            new Etudiant("e13", "e2", 10), 
            new Etudiant("e14", "e2", 10), 
            new Etudiant("e15", "e2", 10), 
            new Etudiant("e16", "e2", 10), 
            new Etudiant("e17", "e2", 10), 
            new Etudiant("e18", "e2", 10)};
        Etudiant e2[] = { 
            new Etudiant("e21", "e2", 10),
            new Etudiant("e22", "e2", 10),
            new Etudiant("e23", "e2", 10),
            new Etudiant("e24", "e2", 10),
            new Etudiant("e25", "e2", 10),
            new Etudiant("e26", "e2", 10),
            new Etudiant("e27", "e2", 10)};
        Promotion p1 = new Promotion("promo1");
        Promotion p2 = new Promotion("promo2");
        Scolarite s = new Scolarite(2010);
        
        for (int i = 0; i < e1.length; i++) {
            e1[i].ajouterNote(11+i);
            p1.addEtudiant(e1[i]);
        }
        System.out.println("--------------\np1 : \n");
        System.out.println(p1);
        
        for (int i = 0; i < e2.length; i++) {
            e2[i].ajouterNote(12+i);
            p2.addEtudiant(e2[i]);
        }
        System.out.println("--------------\np2 : \n");
        System.out.println(p2);
      
        s.addPromotion(p1);
        s.addPromotion(p2);
        
        System.out.println("--------------\nscolarité : \n");
        System.out.println(s);
        
        System.out.println("--------------\nla promotion de e24 : \n");
        System.out.println(s.findPromotion("e24"));
        
        System.out.println("--------------\ne24 : \n");
        System.out.println(s.etudiantByName("e24"));
    }
}