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);
}
}