spmsbl
Messages postés51Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention14 février 2013
-
4 oct. 2010 à 16:48
spmsbl
Messages postés51Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention14 février 2013
-
5 oct. 2010 à 14:11
Bonjour
J'ai un tableau d'objet contenant deux champs par objets
Je dois écrire une méthode qui va trier mon tableau par le premier champ
J'ai déjà une méthode qui extrait le premier champ de chaque objet
J'ai toujours un message d'erreur quand j'appel ma méthode pour trier
voici mon code
public static void trier(String[]code, String[]nom, int nbObj)
{
for(int i = 0; i < nbObj-1; i++)
{
int indMin = i;
for (int j = i+1; j < nbObj; j++)
if (code[j].compareTo(code[indMin]) < 0)
indMin = j;
if ( indMin != i )
{
// permutation :
String tempo = code[i];
code[i] = code[indMin];
code[indMin] = tempo;
Et si on a un tableau de String, Arrays.sort(leTableauDeString); devait fonctionner.
Exemple:
String[] tableauString = {"Bonjour Jean", "Bonjour Alain", "Bonjour Xavier", "Bonjour Claude",
"Adios Jean", "Salut Ali", "zx 1234" ,"zx 123"};
String str = "";
System.out.println("\ntableauString avant tri en ordre croissant:"); // pour controle
for (String n : tableauString) str+= n + ", ";
System.out.println(str.substring(0, str.length()-2)); // pour supprimer la derniere virgule
Arrays.sort(tableauString);
str = "";
System.out.println("\ntableauString apres tri en ordre croissant:"); // pour controle
for (String n : tableauString) str+= n + ", ";
System.out.println(str.substring(0, str.length()-2));
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020369 4 oct. 2010 à 20:50
J'ai lu trop rapidement ton code, en fait, tu n'utilise pas de langage objet, c'est le début de ton message qui m'a induit en erreur avec ton histoire de deux champs par objet
Et une remarque au passage, tu n'as pas besoin de nbObjet, tu peux faire tableau.lenght
En fait, je vois ce que tu veux faire, un peu comme dans excel ou on veut trier en fonction de la première colonne.
Alors oui, on peut dire qu'on travaille par colonne et qu'une colone c'est un tableau de String et galerer pour trier tout ca... On ferait ca si on codait en C ou en autre langage de programmation fonctionnelle. Mais Java est adapté au langage objet, il vaut donc mieux créer une classe ligne
public class Ligne implements Comparable{
String[] ligne;
/**
* Constructeur de ligne
*/
public Ligne(String[] ligneEntree){
ligne=ligneEntree;
}
public String[] getLigne(){
return ligne;
}
public int compareTo(Ligne l){
return ligne[0].compareTo(l.getLigne()[0]);
}
}
Maintenant que tu as créé la classe ligne, tu vas pouvoir créer ton tableau
public class Tableau {
private Ligne[] lignes;
public Tableau(Ligne[] lignes){
this.lignes=lignes;
}
public void trier(){
Array.sort(this);
}
}
Et pour l'utilisation
public static void main(String[] a){
Ligne[] ligne1 = {new Ligne( {"1", "2"} ));
Ligne[] ligne2 = {new Ligne( {"a", "b"} ));
Tableau t = new Tableau({ligne1, ligne2});
t.trier;
}
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020369 4 oct. 2010 à 17:22
Bonjour,
Il faut faire attention à ne pas réinventer la roue...
Il existe déjà un moyen de trier des tableaux, il faut faire ceci :
ta classe d'objet qui sont dans le tableau doit implémenter l'interface Comparable, et donc, forcément, tu redéfinis la fonction compareTo pour cet objet, c'est la comparaison des premiers champs.
spmsbl
Messages postés51Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention14 février 2013 4 oct. 2010 à 18:08
Merci pour ta réponse Julien
Je suis débutant en java, est ce que tu pourrais me donner un exemple ?
Est ce que je dois extraire le premier champ de mon tableau avant de le trier ?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020369 4 oct. 2010 à 20:53
Pardon, j'ai fais une erreur, le compareTo sur les String compare les références. Celà ne peut pas fonctionner, il va falloir implémenter une fonction qui fait un tri dans l'ordre alphabétique pour que ca fonctionne.