Programmation en java POO
Fermé
tadman
-
13 juil. 2012 à 12:46
HackTrack Messages postés 618 Date d'inscription vendredi 26 juillet 2002 Statut Membre Dernière intervention 13 juillet 2013 - 30 juil. 2012 à 21:34
HackTrack Messages postés 618 Date d'inscription vendredi 26 juillet 2002 Statut Membre Dernière intervention 13 juillet 2013 - 30 juil. 2012 à 21:34
A voir également:
- Programmation en java POO
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Scanf en java ✓ - Forum Java
- Jeux java itel ✓ - Forum Jeux vidéo
- Java runtime - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
HackTrack
Messages postés
618
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
13 juillet 2013
972
30 juil. 2012 à 19:50
30 juil. 2012 à 19:50
Salut!
Tu dois utiliser un Comparator et implémenter la méthode compare(Object, Object).
Si tous tes objets à trier sont des sous-classes d'une même superclasse, alors, je te conseille de typer ton comparateur afin d'être certain, dès l'appel de la méthode "compare(Object,Object)" de comparer deux objets du même type. Cela t'évitera des "if(object1 instanceof MaClass)...".
Voici un exemple. Imaginons que tu aies:
- une classe Employee
- plusieurs sous-classes de Employee (Comptable, Secrétaire et Informaticien)
Et imaginons que tu désires les trier par ordre décroissant de revenus bruts.
Classe "Employee":
Sous-classe "Informaticien":
Sous-classe "Secretaire ":
Sous-classe "Comptable ":
Et enfin, la classe qui implémente "Comparator":
Et une classe "Main" pour tester:
La classe Collections possède une méthode statique "sort' qui prend en arguments une liste d'objets à trier et un comparateur.
Une fois que tu as invoqué cette méthode, ta liste est triée selon les critères spécifiés dans ton Comparator.
Un exercice pour toi: ajoute un champ "nom" dans la classe Employee (avec getNom() et setNom()).
Et ajoute un critère de tri sur le nom: si deux personnes ont le même salaire brut alors, trier en plus sur le nom (dans l'ordre alphabétique).
Bon amusement!
;-)
Tu dois utiliser un Comparator et implémenter la méthode compare(Object, Object).
Si tous tes objets à trier sont des sous-classes d'une même superclasse, alors, je te conseille de typer ton comparateur afin d'être certain, dès l'appel de la méthode "compare(Object,Object)" de comparer deux objets du même type. Cela t'évitera des "if(object1 instanceof MaClass)...".
Voici un exemple. Imaginons que tu aies:
- une classe Employee
- plusieurs sous-classes de Employee (Comptable, Secrétaire et Informaticien)
Et imaginons que tu désires les trier par ordre décroissant de revenus bruts.
Classe "Employee":
package hacktrack.sortnumber;
public abstract class Employee {
protected Double salaireBrut;
public Double getSalaireBrut() {
return salaireBrut;
}
public void setSalaireBrut(Double salaireBrut) {
this.salaireBrut = salaireBrut;
}
}
Sous-classe "Informaticien":
package hacktrack.sortnumber;
public class Informaticien extends Employee{
}
Sous-classe "Secretaire ":
package hacktrack.sortnumber;
public class Secretaire extends Employee {
}
Sous-classe "Comptable ":
package hacktrack.sortnumber;
public class Comptable extends Employee {
}
Et enfin, la classe qui implémente "Comparator":
package hacktrack.sortnumber;
import java.util.Comparator;
public class EmployeeComparator implements Comparator<Employee> {
@Override
public int compare(Employee employe_A, Employee employe_B) {
if(employe_A==null){//Si l'employé A==null...
if(employe_B==null)//... et que l'employé B est null aussi...
return 0;//...alors ils sont égaux (0 => les deux employés sont égaux)
return 1;//... mais si l'employé B n'est pas null alors il est 'plus grand' que l'employé A (nombre positif => le second argument est plus grand que le premier)
}
//Ici, nous savons que l'employé A n'est pas égal à null
if(employe_B==null)///
return -1;
return employe_A.getSalaireBrut().compareTo(employe_B.getSalaireBrut());
}
}
Et une classe "Main" pour tester:
package hacktrack.sortnumber;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ComparatorDemo {
public static void main(String[] args) {
List<Employee> employees = new ArrayList<Employee>();
Employee informaticien_1 = new Informaticien();
informaticien_1.setSalaireBrut(new Double(3800));
employees.add(informaticien_1);
Employee informaticien_2 = new Informaticien();
informaticien_2.setSalaireBrut(new Double(3925));
employees.add(informaticien_2);
Employee comptable = new Comptable();
comptable.setSalaireBrut(new Double(3600));
employees.add(comptable);
Employee secretaire_1 = new Secretaire();
secretaire_1.setSalaireBrut(new Double(2950));
employees.add(secretaire_1);
Employee secretaire_2 = new Secretaire();
secretaire_2.setSalaireBrut(new Double(2875));
employees.add(secretaire_2);
Collections.sort(employees, new EmployeeComparator());
for (Employee employee : employees) {
System.out.println(employee.getClass().getSimpleName()+": "+employee.getSalaireBrut());
}
}
}
La classe Collections possède une méthode statique "sort' qui prend en arguments une liste d'objets à trier et un comparateur.
Une fois que tu as invoqué cette méthode, ta liste est triée selon les critères spécifiés dans ton Comparator.
Un exercice pour toi: ajoute un champ "nom" dans la classe Employee (avec getNom() et setNom()).
Et ajoute un critère de tri sur le nom: si deux personnes ont le même salaire brut alors, trier en plus sur le nom (dans l'ordre alphabétique).
Bon amusement!
;-)
30 juil. 2012 à 20:10
public class Test { public static void main(String...args) { Integer[] tab = {1, 4, 7, 2, 5, 8, 3, 6, 9}; java.util.Arrays.sort(tab,new java.util.Comparator<Integer>() { public int compare(Integer n1, Integer n2) { return n2-n1; } }); for (Integer n : tab) System.out.println(n); } }30 juil. 2012 à 21:34
C'est vrai que ça peut paraître un peu compliqué...
J'ai d'abord voulu donner une réponse dans ton style puis, relisant la question de tadman, j'ai noté qu'il demandait:
"[...]progammer en java POO d trié un nombre par ordre décroissant ".
Pour moi, OO veut dire objet. S'il voulait juste trier des nombres entiers, un Bubblesort aurait suffit ou un algorithme de décalage binaire (qui aurait l'avantage d'être plus rapide).
L'exemple que j'ai donné permet d'aborder:
- la méthode Object.compareTo(Object)
- la méthode Comparator.compare(Object, Object)
- la méthode statique Collections.sort(List)
Le but est que tadman ait un aperçu des méthodes utiles dans le cadre d'une comparaison et/ou d'un tri (d'objets).
CQFD
;-)