Trier des valeurs en java

Fermé
sisimouhamed Messages postés 79 Date d'inscription vendredi 5 septembre 2008 Statut Membre Dernière intervention 28 novembre 2011 - 11 déc. 2010 à 12:28
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 15 déc. 2010 à 06:46
Bonjour,

j'ai fais un programme java qui affiche des nom de personne et des nombres concernant leur nombre de consultation.pour cela j'aimerais trier les nombres par ordre croissant mais j'arrive pas à bien le faire.Voici ce que j'ai deja fait:
public class Malade implements java.lang.Comparable
{
String nom;
int nbIntox;
Malade (String nom, int nbIntox) {
this.nom = nom;
this.nbIntox = nbIntox;
}

public int compareTo(Object o)
{
int nombre1 = ((Malade) o).nbIntox;
int nombre2 = this.nbIntox;
if (nombre1 > nombre2) return -1;
else if(nombre1 == nombre2) return 0;
else return 1;
}
}
je veut faire le tri dans cette methode:
static void afficherMalades (List liste)
{
for (int i = 0; i < liste.size(); i++)
{
Malade p = (Malade) liste.get(i);
System.out.println(p);

}
}

A voir également:

2 réponses

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 11/12/2010 à 19:23
Tu dois spécifier les types des classes template !
Tu auras donc Comparable<Malade> et List<Malade>

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

public class Malade implements java.lang.Comparable<Malade> 
{  
     protected String nom;  
     protected int nbIntox;  

     public Malade (String nom, int nbIntox) 
     {  
          this.nom = nom;  
          this.nbIntox = nbIntox;  
     }  

     public int compareTo(Malade m)
     {
          if (nbIntox==m.nbIntox)
               return nom.compareTo(m.nom);
          else return nbIntox-m.nbIntox;
     }

     public static void afficherMalades(List<Malade> liste)  
     {                
          Collections.sort(liste); 
           
          for (Malade m : liste)  
          {  
               System.out.println(m);  
          } 
     }  
}

La confiance n'exclut pas le contrôle
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 11/12/2010 à 19:49
Remarque : ici la liste est triée à chaque fois qu'on appelle afficherMalades.

On peut éventuellement surcharger la méthode pour ne pas trier la collection lorsqu'on est sûr qu'elle est déjà triée (implémentant SortedSet par exemple) :

import java.util.SortedSet; 

public static void afficherMalades(SortedSet<Malade> set)  
{      
     for (Malade m : set)  
     {  
          System.out.println(m);  
     } 
}
0
sisimouhamed
15 déc. 2010 à 02:40
bonjour la solution que vous m'avez donné marche bien mais j'aimerais aussi savoir comment fair le trie par ordre alphabetique des nom.Merci de m'aider
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
15 déc. 2010 à 06:46
Dans, ce cas, soit tu changes la méthode compareTo, soit tu implémentes un Comparator que tu passes en paramètre de sort
0