Trier tableau d'objet [Résolu]

Signaler
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013
-
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013
-
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;

// permutation :
String temp = nom[i];
nom[i] = nom[indMin];
nom[indMin] = temp;
}
}
}


et voici l'appel

Classe.trier( tableau, tableau, nbObj);

J'ai essayer aussi Classe.trier( tableau.getCode(), tableau.getNom(), nbEtudiant);

Mais j'ai toujours des erreurs de compilation

Merci d'avance pour votre aide

6 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
338
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;
}

Salut,

@Julien39:

Attention c'est Arrays.sort(... AVEC UN S

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));


Cordialement,

...\ Dan /...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
338
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.

Et ensuite, tu utilises Array.sort(tableau);

Et le tour est joué en 5 lignes maximum.
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013

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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
338
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.
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
14 février 2013

Merci beaucoup a vous deux pour votre aide !