Trier tableau d'objet [Résolu]

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

// 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 

Votre réponse

6 réponses

Meilleure réponse
3
Merci
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 /...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
2
Merci
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
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
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
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Dernière intervention
14 février 2013
0
Merci
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
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
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
Messages postés
51
Date d'inscription
lundi 2 octobre 2006
Dernière intervention
14 février 2013
0
Merci
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.