Programmation en java POO

Fermé
tadman - 13 juil. 2012 à 12:46
 Utilisateur anonyme - 30 juil. 2012 à 21:34
Bonjour, tt ls mds!!! est vous pouvez m'aider d progammer en java POO d trié un nombre par ordre décroissant



A voir également:

1 réponse

Utilisateur anonyme
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":
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!

;-)
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 juil. 2012 à 20:10
C'est un peu compliqué juste pour trier des nombres, non ?

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);
    }
}
0
Utilisateur anonyme
30 juil. 2012 à 21:34
Salut KX!

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

;-)
0