Java Trier par ordre aplhabétique(compareTo)
Résolu/Fermé
A voir également:
- Trier une liste par ordre alphabétique java
- Excel trier par ordre alphabétique - Guide
- Liste déroulante excel - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Classer les applications par ordre alphabétique iphone - Guide
13 réponses
Bonsoir
En vérifiant mon algo ce soir je me suis rendu compte que dans mon test j avais écrit :
if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )
a la place de :
if( pListe.get(min).getNom().compareTo( pListe.get(j).getNom()) > 0 )
Donc voici un petit test effectué :
Classe Personnes
Programme de test :
Cela nous renvoie bien une liste triée par ordre alphabétique :)
Bonne soirée
En vérifiant mon algo ce soir je me suis rendu compte que dans mon test j avais écrit :
if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )
a la place de :
if( pListe.get(min).getNom().compareTo( pListe.get(j).getNom()) > 0 )
Donc voici un petit test effectué :
Classe Personnes
import java.util.ArrayList; public class Personnes { String Nom; Integer Age; public Personnes(String pNom, Integer pAge) { Nom = pNom; Age = pAge; } public Integer getAge() { return Age; } public void setAge(Integer age) { Age = age; } public String getNom() { return Nom; } public void setNom(String nom) { Nom = nom; } public String Affichage() { return "Nom :\t" + Nom + "\r\nAge :\t" + String.valueOf(Age) + "\r\n"; } public static ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe) { Integer i, j, min; Personnes temp; for(i = 0; i < pListe.size(); i++) { min = i; for(j = i; j < pListe.size(); j++) { if(pListe.get(min).getNom().compareTo(pListe.get(j).getNom()) > 0) { min = j; } } temp = pListe.get(i); pListe.set(i, pListe.get(min)); pListe.set(min, temp); } return pListe; } }
Programme de test :
import java.util.ArrayList; import java.util.Iterator; public class test_triAlphabetique { public static void main(String[] args) { ArrayList<Personnes> listePersonnes = new ArrayList<Personnes>(); listePersonnes.add(new Personnes("prof2011", 25)); listePersonnes.add(new Personnes("alt157", 21)); listePersonnes.add(new Personnes("bisounours", 21)); listePersonnes.add(new Personnes("douffi", 21)); listePersonnes.add(new Personnes("cowboy", 21)); listePersonnes.add(new Personnes("polo", 23)); Iterator<Personnes> iter = listePersonnes.iterator(); while(iter.hasNext()) { Personnes tmp = iter.next(); System.out.println(tmp.Affichage()); } System.out.println("\r\n__________________________\r\n"); Personnes.TriAlphabetique(listePersonnes); iter = listePersonnes.iterator(); while(iter.hasNext()) { Personnes tmp = iter.next(); System.out.println(tmp.Affichage()); } } }
Cela nous renvoie bien une liste triée par ordre alphabétique :)
Bonne soirée
Bonjour à vous,
Si j'ai bien compris le but est de trier une class "Personne" dans l ordre alphabétique...
utilisation du Set (collection java ou conteneur)
Pour cela il suffit de créer une TreeSet dans laquelle on insert les personnes...
Elle sera automatiquement classée par ordre alphabétique a condition que:
*1. La class Personne implémente la class Comparable<Personne>
- public class Personne implements Comparable<Personne>
{
// Description de la class Personne
}
**2. La méthode compareTo de la class Comparable doit être redéfinie dans la class Personne
===> la methode CompareTo sera utilisée par la TreeSet et determinera par quel critères on trie les personnes, age nom etc.. <===
la methode compareTo est complexe et permet de comparer n'importe quel type simple enveloppé dans un objet (Wrapper) et donc même une String... elle retourne un entier qui est l'ecart entre les deux premier caractères différents d'une string. (faite un essai)
La TreeSet se servira de ce résultat pour déterminer l'ordre alphabétique...
par exemple : une redéfinition de compareTo qui tri par :
- Ordre alphabétique
- Age si le nom est le meme
- Attention si il n'y a que ces deux critères et que l'age et le nom sont les même, la TreeSet ne contiendra qu'une fois la personne car elle a la caractéristique de ne pas accepter les doublons...
Exemple:
// compare nom puis si même non compare age
public int compareTo(Personne personne2)
{
int memeNom = this.nom.compareTo(personne2.nom);
if(memeNom == 0)
{
return new Integer(age).compareTo(new Integer(personne2.age));
}
return memeNom;
}
***3. Introduire les instances de Personne dans une TreeMap
Exemple:
Set<Personne> setPersonne = new TreeSet<Personne>();
SetPersonne.add(personne1);
SetPersonne.add(personne2);
SetPersonne.add(personne3);
afficher(SetPersonne);
// affichera dans l'ordre alphabétique et dans l ordre des ages...
Salutations
Si j'ai bien compris le but est de trier une class "Personne" dans l ordre alphabétique...
utilisation du Set (collection java ou conteneur)
Pour cela il suffit de créer une TreeSet dans laquelle on insert les personnes...
Elle sera automatiquement classée par ordre alphabétique a condition que:
*1. La class Personne implémente la class Comparable<Personne>
- public class Personne implements Comparable<Personne>
{
// Description de la class Personne
}
**2. La méthode compareTo de la class Comparable doit être redéfinie dans la class Personne
===> la methode CompareTo sera utilisée par la TreeSet et determinera par quel critères on trie les personnes, age nom etc.. <===
la methode compareTo est complexe et permet de comparer n'importe quel type simple enveloppé dans un objet (Wrapper) et donc même une String... elle retourne un entier qui est l'ecart entre les deux premier caractères différents d'une string. (faite un essai)
La TreeSet se servira de ce résultat pour déterminer l'ordre alphabétique...
par exemple : une redéfinition de compareTo qui tri par :
- Ordre alphabétique
- Age si le nom est le meme
- Attention si il n'y a que ces deux critères et que l'age et le nom sont les même, la TreeSet ne contiendra qu'une fois la personne car elle a la caractéristique de ne pas accepter les doublons...
Exemple:
// compare nom puis si même non compare age
public int compareTo(Personne personne2)
{
int memeNom = this.nom.compareTo(personne2.nom);
if(memeNom == 0)
{
return new Integer(age).compareTo(new Integer(personne2.age));
}
return memeNom;
}
***3. Introduire les instances de Personne dans une TreeMap
Exemple:
Set<Personne> setPersonne = new TreeSet<Personne>();
SetPersonne.add(personne1);
SetPersonne.add(personne2);
SetPersonne.add(personne3);
afficher(SetPersonne);
// affichera dans l'ordre alphabétique et dans l ordre des ages...
Salutations
maxmethot
Messages postés
168
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
12 octobre 2008
55
24 janv. 2008 à 18:06
24 janv. 2008 à 18:06
Salut aleben !
Essaye ca :
import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration
// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();
String temp1, temp2, temp3;
if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");
if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");
if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");
System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}
Tu devrait le tester avant parce que jai écris ca de mémoire.
Au plaisir,
Maxmethot
Essaye ca :
import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration
// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();
String temp1, temp2, temp3;
if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");
if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");
if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");
System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}
Tu devrait le tester avant parce que jai écris ca de mémoire.
Au plaisir,
Maxmethot
aleben
Messages postés
85
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
18 août 2009
18
24 janv. 2008 à 23:29
24 janv. 2008 à 23:29
Merci Maxmethot,
il compile bien mais j'ai un problème il ne s'execute pas, comment ce fait-il??
j'ai fait une ou deux modif:
import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration
// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();
String phrase = new String();
phrase = "Error";
String temp1=phrase, temp2=phrase, temp3=phrase;
if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");
if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");
if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");
if(chaine1==phrase || chaine2==phrase || chaine3==phrase)
{
System.out.print("Error");
}
else
System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}
Est-ce normal?
il compile bien mais j'ai un problème il ne s'execute pas, comment ce fait-il??
j'ai fait une ou deux modif:
import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration
// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();
String phrase = new String();
phrase = "Error";
String temp1=phrase, temp2=phrase, temp3=phrase;
if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");
if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");
if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");
if(chaine1==phrase || chaine2==phrase || chaine3==phrase)
{
System.out.print("Error");
}
else
System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}
Est-ce normal?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
maxmethot
Messages postés
168
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
12 octobre 2008
55
25 janv. 2008 à 04:39
25 janv. 2008 à 04:39
Oui c'est normal parce que ton string phrase est en fait un "objet" string que tu dois comparer en utilisant la méthode Equals plutôt que les == . Remplace ton dernier if par celui ci et re-teste :
if(chaine1.equals(phrase) || chaine2.equals(phrase) || chaine3.equals(phrase))
En passant, tu n'a pas besoin de dire a ta string que tu la déclare en objet :
String phrase = new String();
phrase = "Error";
Tu peux tout simplement lui dire :
String phrase = "Error";
et le compilateur comprendra que c'est un objet de type string automatiquement.
Ah oui, également, fais attention: tu lance une condition qui va vérifier si la chaine1,2 ou 3 est égale à "Error", mais nulle part dans le programme tu dis à ces chaine de prendre la valeur "Error", ce qui fait en sorte que cette condition retournera toujours la valeur "False" et donc n'exécutera jamais le code à l'intérieur de la condition. Je ne sais pas exactement qu'est-ce que tu essayais de tester avec cette condition, mais je peux te confirmer que présentement, elle ne te sert littéralement à rien. Tu pourrais l'enlever et il n'y aurait pas de différence.
En espérant t'avoir éclairé un peu,
N'hésite pas si tu as d'autres questions,
Au plaisir,
Maxmethot
if(chaine1.equals(phrase) || chaine2.equals(phrase) || chaine3.equals(phrase))
En passant, tu n'a pas besoin de dire a ta string que tu la déclare en objet :
String phrase = new String();
phrase = "Error";
Tu peux tout simplement lui dire :
String phrase = "Error";
et le compilateur comprendra que c'est un objet de type string automatiquement.
Ah oui, également, fais attention: tu lance une condition qui va vérifier si la chaine1,2 ou 3 est égale à "Error", mais nulle part dans le programme tu dis à ces chaine de prendre la valeur "Error", ce qui fait en sorte que cette condition retournera toujours la valeur "False" et donc n'exécutera jamais le code à l'intérieur de la condition. Je ne sais pas exactement qu'est-ce que tu essayais de tester avec cette condition, mais je peux te confirmer que présentement, elle ne te sert littéralement à rien. Tu pourrais l'enlever et il n'y aurait pas de différence.
En espérant t'avoir éclairé un peu,
N'hésite pas si tu as d'autres questions,
Au plaisir,
Maxmethot
Maxmethot,
j'ai remis la version que tu m'avais dit en premier mais il ne s'execute pas, il compile et quand je l'exécute il ne se passe rien
j'ai remis la version que tu m'avais dit en premier mais il ne s'execute pas, il compile et quand je l'exécute il ne se passe rien
maxmethot
Messages postés
168
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
12 octobre 2008
55
27 janv. 2008 à 06:17
27 janv. 2008 à 06:17
Quel IDE utilise tu ?!
Eclipse, NetBeans ?!
As tu des messages d'erreurs dans la console ?! Si oui, poste les ici.
maxmethot
Eclipse, NetBeans ?!
As tu des messages d'erreurs dans la console ?! Si oui, poste les ici.
maxmethot
Bonjour,
j'utilise NetBeans et quand je le compile il ne me met aucune erreur c'est quand il met running en bas a droite que la ça dure tellement longtemps que c'est anormal et je n'ai jamais de résultat même est le laissant tourner plus de 3 minutes.
aleben
j'utilise NetBeans et quand je le compile il ne me met aucune erreur c'est quand il met running en bas a droite que la ça dure tellement longtemps que c'est anormal et je n'ai jamais de résultat même est le laissant tourner plus de 3 minutes.
aleben
soufian1364
Messages postés
41
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
23 mai 2016
4
21 févr. 2008 à 23:39
21 févr. 2008 à 23:39
Bonjour eleben, Bonjour maxmethot, Bonjour à tous,
d'abors, j'aimerais vous remercier pour ce sujet, cette question,
et personnelement je vous propose ma résolution (toujour dans le même probleme) :
import java.io.*;
public class ComparaisonDeTroixString {
public static void main (String [] args)throws IOException {
BufferedReader clavier=new BufferedReader (new InputStreamReader (System.in));
String a,b,c,temp1="", temp2="", temp3="";
System.out.println("Veuillez saisir troix mots");
a=clavier.readLine();
b=clavier.readLine();
c=clavier.readLine();
if ((a.compareTo(b)>0) && (a.compareTo(c)>0)) { // si( a>b et a>c )
temp1=a;
if (b.compareTo(c)>0){
temp2=b;
temp3=c;
}
else {
temp2=c;
temp3=b;
}
}
if ((b.compareTo(a)>0) && (b.compareTo(c)>0)) { // si( b>a et b>c )
temp1=b;
if (a.compareTo(c)>0){
temp2=a;
temp3=c;
}
else {
temp2=c;
temp3=a;
}
}
if ((c.compareTo(a)>0) && (c.compareTo(b)>0)) { // si( c>a et c>b )
temp1=c;
if (a.compareTo(b)>0){
temp2=a;
temp3=b;
}
else {
temp2=b;
temp3=a;
}
}
System.out.println("Le bon tri est :"+temp3+" puis "+temp2+" puis "+temp1);
}
}
d'abors, j'aimerais vous remercier pour ce sujet, cette question,
et personnelement je vous propose ma résolution (toujour dans le même probleme) :
import java.io.*;
public class ComparaisonDeTroixString {
public static void main (String [] args)throws IOException {
BufferedReader clavier=new BufferedReader (new InputStreamReader (System.in));
String a,b,c,temp1="", temp2="", temp3="";
System.out.println("Veuillez saisir troix mots");
a=clavier.readLine();
b=clavier.readLine();
c=clavier.readLine();
if ((a.compareTo(b)>0) && (a.compareTo(c)>0)) { // si( a>b et a>c )
temp1=a;
if (b.compareTo(c)>0){
temp2=b;
temp3=c;
}
else {
temp2=c;
temp3=b;
}
}
if ((b.compareTo(a)>0) && (b.compareTo(c)>0)) { // si( b>a et b>c )
temp1=b;
if (a.compareTo(c)>0){
temp2=a;
temp3=c;
}
else {
temp2=c;
temp3=a;
}
}
if ((c.compareTo(a)>0) && (c.compareTo(b)>0)) { // si( c>a et c>b )
temp1=c;
if (a.compareTo(b)>0){
temp2=a;
temp3=b;
}
else {
temp2=b;
temp3=a;
}
}
System.out.println("Le bon tri est :"+temp3+" puis "+temp2+" puis "+temp1);
}
}
aleben
Messages postés
85
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
18 août 2009
18
14 mars 2008 à 00:31
14 mars 2008 à 00:31
Merci à tous pour vos réponses
prof2011
Messages postés
8
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
7 août 2009
2 août 2009 à 23:20
2 août 2009 à 23:20
bonjour soufian1364 et Bonjour à tous je m'appel zeid et je voudrer savoir comment on peut generaliser tri par
orde alphabetique
sur un tableau de plusieur objet personne
orde alphabetique
sur un tableau de plusieur objet personne
Bonjour tout le monde,
@prof2011 : Tu peux créer une méthode statique dans ta Classe Personne par exemple :
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{}
Cette méthode pourra comporter un simple algorithme de tri du genre :
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{
for (int i = 0; i < pListe.size(); i++)
{
int min = i;
for( int j = i ; j < pListe.size(); j++)
{
if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )
{
min = j
}
}
Personnes tmp = pListe.get(i);
pListe.set(i, pListe.get(j));
pListe.set(min, tmp);
}
return pListe;
}
(pas testé je l ai fait de tete vu que je n ai pas de machines avec Java sous la main mais tu as l idée général ainsi)
@prof2011 : Tu peux créer une méthode statique dans ta Classe Personne par exemple :
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{}
Cette méthode pourra comporter un simple algorithme de tri du genre :
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{
for (int i = 0; i < pListe.size(); i++)
{
int min = i;
for( int j = i ; j < pListe.size(); j++)
{
if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )
{
min = j
}
}
Personnes tmp = pListe.get(i);
pListe.set(i, pListe.get(j));
pListe.set(min, tmp);
}
return pListe;
}
(pas testé je l ai fait de tete vu que je n ai pas de machines avec Java sous la main mais tu as l idée général ainsi)
Pour l entete de la méthode ce n est pas :
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
je me suis trompé j ai oublié le mot static ce qui donne :
public static ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
je me suis trompé j ai oublié le mot static ce qui donne :
public static ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
prof2011
Messages postés
8
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
7 août 2009
7 août 2009 à 14:21
7 août 2009 à 14:21
Bonjour tout le monde,
alt157 : merci ce claire
et merci pour la rectification!!
alt157 : merci ce claire
et merci pour la rectification!!
prof2011
Messages postés
8
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
7 août 2009
7 août 2009 à 14:37
7 août 2009 à 14:37
salut alt157
il y a une message d'erreur comme ceci
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at personne_comparaison.Main.main(Main.java:26)
Java Result: 1
il y a une message d'erreur comme ceci
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at personne_comparaison.Main.main(Main.java:26)
Java Result: 1