Trier des valeurs en java
sisimouhamed
Messages postés
100
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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);
}
}
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);
}
}
2 réponses
-
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-
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); } }
-
-
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
-
Dans, ce cas, soit tu changes la méthode compareTo, soit tu implémentes un Comparator que tu passes en paramètre de sort
-