Trier des valeurs en java
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
-
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
-
ModérateurDans, ce cas, soit tu changes la méthode compareTo, soit tu implémentes un Comparator que tu passes en paramètre de sort
-
-
ModérateurTu 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-
ModérateurRemarque : 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); } }
-