Trier tableau d'objet [Résolu]

spmsbl 51 Messages postés lundi 2 octobre 2006Date d'inscription 14 février 2013 Dernière intervention - 4 oct. 2010 à 16:48 - Dernière réponse : spmsbl 51 Messages postés lundi 2 octobre 2006Date d'inscription 14 février 2013 Dernière intervention
- 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;

// 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
Afficher la suite 

6 réponses

Répondre au sujet
Utilisateur anonyme - 5 oct. 2010 à 10:46
+3
Utile
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 /...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 4 oct. 2010 à 20:50
+2
Utile
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;
}
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 4 oct. 2010 à 17:22
0
Utile
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.
Commenter la réponse de cs_Julien39
spmsbl 51 Messages postés lundi 2 octobre 2006Date d'inscription 14 février 2013 Dernière intervention - 4 oct. 2010 à 18:08
0
Utile
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
Commenter la réponse de spmsbl
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 4 oct. 2010 à 20:53
0
Utile
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.
Commenter la réponse de cs_Julien39
spmsbl 51 Messages postés lundi 2 octobre 2006Date d'inscription 14 février 2013 Dernière intervention - 5 oct. 2010 à 14:11
0
Utile
Merci beaucoup a vous deux pour votre aide !
Commenter la réponse de spmsbl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.