Correction exercice supplémentaire

Décompressez l’archive fournie ici

package s05.comparable;

public class Heure implements Comparable<Heure>{
	private int heures;
	private int minutes;

	/**
	 * Initialie l'heure this de sorte a correspondre a l'heure h:mn
	 * @param h, le nombre d'heures, h dans [0, 23]
	 * @param mn, le nombre de minutes, mn dans [0, 59]
	 */
	 public Heure(int h, int mn) {
		if (h>=0 && h<=23 && mn>=0 && mn<=59) {
			this.heures=h;
			this.minutes=mn;
		} else {
			throw new IllegalArgumentException();
		}
	}

	
	/**
	 * @return Retourne le nombre de d'heures de this. 
	 * Exemple: - si this est 12:15, retourne 12
	 */
	public int getHeures() {
		return this.heures;
	}

	/**
	 * @return Retourne le nombre de minutes de this. 
	 * Exemple: - si this est 12:15, retourne 15
	 */
	public int getMinutes() {
		return this.minutes;
	}

	/**
	 * Si h est dans [0, 23], affecte h pour nombre d'heures de this
	 * (ne modifie pas this si h n'est pas dans [0, 23])
	 * @param h
	 */
	public void setHeures(int h) {
		if (h>=0 && h<24) {
			this.heures = h;
		}
	}

	/**
	 * Si mn est dans [0, 59], affecte mn pour nombre de minutes de this
	 * (ne modifie pas this si mn n'est pas dans [0, 59])
	 * @param mn
	 */
	public void setMinutes(int mn) {
		if (mn>=0 && mn<60) {
			this.minutes = mn;
		}
	}

	/**
	 * @param heure, l'heure avec laquelle on souhaite comparer this
	 * @return Retourne true si this est strictement anterieure (avant) a h
	 * (retourne false si h est null ou si h est anterieure ou egale a this)
	 */
	public boolean before(Heure h) {
		return h!=null &&
		        ((this.getHeures()<h.getHeures() 
				|| (this.getHeures()==h.getHeures() 
				    && this.getMinutes()<h.getMinutes())));
	}

	/**
	 * @return Retourne true si o est une Heure egale a this
	 * (retourne false si o n'est pas une Heure ou n'est pas egale a )
	 */
	public boolean equals(Object o) {
		return (o!=null)
			&& (o instanceof Heure) 
			&&(this.getHeures()==((Heure)o).getHeures()
			&& this.getMinutes()==((Heure)o).getMinutes());
	}

	/**
	 * @param h, h!=null (leve une IllegalArgumentException si h==null)
	 * @return Retourne 0 si h est une heure egale a this, 
	 * -1 si this est strictement anterieure a h
	 * et retourne 1 si this est strictement posterieure a h
	 */
	public int compareTo(Heure h) {
		if (h==null) {
			throw new IllegalArgumentException();
		}
		if (this.equals(h)) {
			return 0;
		} else if (this.before(h)) {
			return -1;
		} else {
			return 1;
		}
		// OU
		/*
                if (h==null) throw new IllegalArgumentException();
		return (equals(h)?0:(before(h)?-1:1));
		*/
	}

	/**
	 * @return Retourne une chaine de 5 caracteres correspondant a this.
	 * Exemples: 
	 * - Si this correspond 8 heures et 7 minutes, retourne "08:07"
	 * - si this correspond a minuit moins le quart, retourne "23:45"
	 */
	public String toString() {
		String aRetourner="";
		if (this.getHeures()<10) {
			aRetourner="0";
		}
		aRetourner=aRetourner+this.getHeures()+":";
		if (this.getMinutes()<10) {
			aRetourner=aRetourner+"0";
		}
		return aRetourner+this.getMinutes();
	}
}
package s05.comparable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestSort {
	public static void main(String[] args) {
		List<Integer> listeEntiers = new ArrayList<Integer>();
		for (int i=1; i<=8; i++) {
			listeEntiers.add(Integer.valueOf( (int)(Math.random()*101)));
		}
		System.out.println(listeEntiers);
		Collections.sort(listeEntiers);
		System.out.println(listeEntiers);
		
		List<String> listeString = new ArrayList<String>();
		for (int i=1; i<=8; i++) {
			listeString.add( ""+(char)(65+(int)(Math.random()*26))+(char)(65+(int)(Math.random()*26))+(char)(65+(int)(Math.random()*26)));
		}
		System.out.println(listeString);
		Collections.sort(listeString);
		System.out.println(listeString);
		
		
		List<Heure> listeHeures = new ArrayList<Heure>();
		for (int i=1; i<=8; i++) {
			listeHeures.add( new Heure( (int)(Math.random()*24), (int)(Math.random()*60)));
		}
		System.out.println(listeHeures);
		Collections.sort(listeHeures);
		System.out.println(listeHeures);

		
		Collections.shuffle(listeHeures);
		System.out.println(listeHeures);

		System.out.println("min = "+Collections.min(listeHeures));
		System.out.println("max = "+Collections.max(listeHeures));

		Collections.sort(listeHeures);
		Collections.reverse(listeHeures);
		System.out.println(listeHeures);
	}

}