IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Débutant] Tri tableau String


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [Débutant] Tri tableau String
    Question très bête... j'ai fait des recherches, parcouru la faq, mais malgré tout j'ai du mal à comprendre comment m'y prendre....

    J'ai un tableau de String[][], ou je dois trier chaque ligne dans un ordre alphabétique sur des champs particulier (Par exemple String[0][2],String[0][4],String[0][1])

    On conseille d'utiliser un comparator et de trier avec collections.sort(String,Comparator);

    En pratique... je dois recreer un tableau[][+1] avec en String[][0] la concaténation de mes champs sur lequel se font le tri ? Et comment indiquer le comparator (Vu qu'il devra alors comparer uniquement sur String[][0]? Enfin, je patauge un peu...


    Et dire qu'on achève bien les chevaux

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonjour

    Ben nous aussi on patauge, tu peux préciser ce que tu veux faire.
    Sinon, pour le tri il vaut mieux utiliser sort() que de recoder une algo.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yann2
    Ben nous aussi on patauge, tu peux préciser ce que tu veux faire.
    Au temps pour moi

    J'ai donc un tableau de String avec comme valeur par exemple :

    String[0][0] = "Jean", String[0][1] = "Dupont", String[0][2] = "Le faignant'"
    String[1][0] = "Francois", String[1][1] = "Dubois", String[1][2] = "Le boulanger'"
    String[2][0] = "Francois", String[2][1] = "Dubois", String[2][2] = "Le garagiste'"

    Je voudrais trier mon tableau pour obtenir :

    Dubois;Francois;Le boulanger
    Dubois;Francois;Le garagiste
    Dupont;Jean;Le faignant

    ou les éléments seraient placés dans mon tableau :
    String[0][0] = "Francois", String[0][1] = "Dubois", String[0][2] = "Le boulanger'"
    String[1][0] = "Francois", String[1][1] = "Dubois", String[1][2] = "Le garagiste'"
    String[2][0] = "Jean", String[2][1] = "Dupont", String[2][2] = "Le faignant'"


    J'espère avoir été un peu plus clair (Quoi que je doute )

  4. #4
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ce que tu peux faire, c'est de creer des chaines de carateres avec les lignes de ton tableau.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String chaine1 = "Dubois François Le boulanger"
    String chaine2 = "Dupont Jean Le fainéant"
    String chaine3 = "Dubois François Le garagiste"
    Tu compare ensuite ces string les unes aux autres, pour les classer dans l'ordre.

    Puis tu recrée ton tableau en coupant ses Strings.
    Tu comparera en fait la phrase "Nom Prénom Profession" ou si tu veux un autre ordre de comparaison, tu crée tes chaines au début autrement "Prénom Nom Profession"...

    Je pense que tu es obligé de le faire manuellement car ton tableau est un tableau de tableau, et du copup pour le faire automatiquement c'est le bordel

    Le but c'est de se ramener à une seule chaine de caracctere pour pouvoir la trier facilement

  5. #5
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 41
    Points : 42
    Points
    42
    Par défaut
    Tu peux aussi utiliser des tris du genre tri à bulle ou par dichotomie.

    Ex: tri à bulle

    parcourir ta collection
    si element[n]>element [n+1] les permutter et mettre un flag à true
    fin du parcours

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par bertlef
    Tu peux aussi utiliser des tris du genre tri à bulle ou par dichotomie.
    J'aurais justement voulu éviter comme dit Yann2 de coder l'algo, s'il était possible de faire un sort().

    En modifiant le tableau, ou autre solution...Mais je ne vois pas comment dans la "pratique"

  7. #7
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ce que je te propose est facile a realiser.
    Tu recupere tes String. Tu te cree donc un tableau a 1 dimension, qu'il est facile alors de trier (par sort() par exemple).
    Et ensuite tu redecoupe ton tableau (facile aussi vu que des fonctions te permette de couper ta string avec le caractere de separation)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par narfiggo
    Ce que je te propose est facile a realiser.
    Deux trois p'tites question quand même Je dois définir un Comparator? et si j'ai des champs en plus qui ne servent pas dans le tri, ça va complexifier non?

  9. #9
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Sigwald
    Citation Envoyé par narfiggo
    Ce que je te propose est facile a realiser.
    Deux trois p'tites question quand même Je dois définir un Comparator? et si j'ai des champs en plus qui ne servent pas dans le tri, ça va complexifier non?
    Pour le comparator ta pas a en faire un, pour le langage naturel le tri se fera tout seul (comme pour les entiers d'ailleurs...).
    Apres si t'as des champs qui ne servent pas dans le tri tu les rajoute a la fin des string que tu construits comme ca ils auront pas d'influence.
    Si tu compare plusieurs phrases, la comparaison s'effectue en partant du premier mot donc l'ordre dans lequel tu construira ta string definira les priorités de comparaison (d'abor Nom puis Prenom puis le reste par exemple, la tu sais que tes string seront forcement classe suivant leur nom puis leur prenom, le reste tu t'en fout )

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par narfiggo
    Pour le comparator ta pas a en faire un, pour le langage naturel le tri se fera tout seul (comme pour les entiers d'ailleurs...).
    Attention, retour de question bête... On peut pas faire un sort() sur un tableau de String? Je dois passer par quoi?

    Grand merci pour ses réponses

  11. #11
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Allez une petite méthode qui trie ton tableau :
    http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#sort(java.lang.Object[])

    Ca doit etre du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Arrays.sort(tontableau);
    Et hop ton tableau est trié, enfin j'espere.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par narfiggo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Arrays.sort(tontableau);
    Et hop ton tableau est trié, enfin j'espere.
    Ca me file systématiquement une exception : java.lang.NullpointerException Pourtant le tableau est correct

  13. #13
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    La méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Arrays.sort(Object[] tab)
    est une méthode statique.Tu l'appelle bien avec cette syntaxe :
    Et le parametre tab est bien un tableau a une dimension contenat tes String :
    Si l'execption est java.lang.NullpointerException, c'est :
    Soit ton parametre tab n'a pas été instancié.
    Soit tu n'a pas fait l'import de la classe Array. import java.util.Arrays;
    Soit tu as fait une erreur de syntaxe.
    Soit tu es maudit

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    C'est dommage que tu n'es pas utilisé la capacité objet du langage Java.
    En ayant crée une classe Personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Personne {
      private String nom;
      private String prenom;
      private String metier;
     
      public mes_accesseur // les get et les set
     
      public Personne{
         // blabla de creation de Personne
      }
    }
    puis en utilisant l'interface Comparator :
    http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    implements Comparator
    public int compare(Personne o1, Personne o2) {
     if(o1.nom > o2.nom)
          return 1;
     else if (o1.nom < o2.nom)
          return -1;
      else if (o1.prenom > o2.prenom)
          return 1;
      else if (o1.prenom < o2.prenom)
          return -1;
      else if (o1.metier > o2.metier)
          return 1;
       else if (o1.metier < o2.metier)
          return -1;
        else
           return 0; // decidement, c'est les mêmes personnes !!!
    }
    même chose à faire pour equals

    et hop, on peut utiliser sort sans problèmes pour un tableau de Personne.

  15. #15
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Uner petite question de logique pourquoi trier sur le métier, on peut supposer que si le nom et le prémons sont les même ben c'est la même personne, il y à très peu de chances que ce soit un homonyme...

    On peut faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PersonneComparator implements Comparator {
      ...
      public int compare(Objeto1, Objet o2) {
        String nomPrenom1 = ((Personne) o1).getNom() + ((Personne) o1).getPrenom();
        String nomPrenom2 = ((Personne) o2).getNom() + ((Personne) o2).getPrenom();
     
        return nomPrenom1.compareTo(NomPrenom2);  
      }
    }

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par thibaut
    Uner petite question de logique pourquoi trier sur le métier, on peut supposer que si le nom et le prémons sont les même ben c'est la même personne, il y à très peu de chances que ce soit un homonyme...
    Ce n'est pas le contenu du tableau, c'était uniquement pour l'exemple Le tableau peut contenir à peu près n'importe quoi, et les critères de tri peuvent changer.

    En gros, je remplis mon tableau de ce que je veux, puis je choisis sur quelle "champ" du tableau je veux trier... mais ça pourrais être n'importe quoi.

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Parce que fondamentalement les homonymes existent.
    Mon grand-père a le même nom/prénom que moi, mais pas le même métier.
    Et le travail d'un informaticien (et son malheur aussi), c'est de traquer l'exception, le grain de sable, qui fera que son problème se plante.

    Tu pourrais me faire remarquer que je devrais mettre un genre de warning si les deux personnes ont le même métier en plus des mêmes noms et prénoms, et tu aurais raison. Sauf que j'ai la flemme de gérer ça vu que je ne connais pas les cas d'utilisations du programme en question.

  18. #18
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ca a pres c'est une question de logique humaine
    Mais dans l'exemple de Sigwald yavait une meme personne avec un metier different.

  19. #19
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Pour Sigwald qui doit se demander si on l'a oublié au milieu du HS.

    Tu m'aurais donné un tableau d'élements à une dimension, j'aurais utiliser sort sans problème.
    Tu m'aurais donné un tableau d'élements à plusieurs dimensions, mais en ayant une seule dimension à trier, j'aurais trouvé une solution avec sort en cherchant ou bidouillant un peu.

    Mais un tableau à plusieurs dimensions, qu'on doit trier en fonction des autres dimensions et l'index d'itération sur encore une dimension séparée, aïe, je sèche un peu.

    Edit pour thibaut en dessous :
    Pourquoi Dupont est au-dessus de Tartempion et Raffarin en-dessous de Chirac, raison arbitraire d'ordre lexicographique. Même méthode utilisée pour les métiers
    Taquinons-nous

  20. #20
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Tu as raison le boulot d'un informaticien
    c'est de traquer l'exception
    mais aussi de gérer non pas la majorité des cas mais les cas qui peuvent survenir pour un domaine fonctionnel donné...

    Ce que je voulais dire par là, c'est que ça n'a pas beaucoup de sens de trier par rapport à un métier, pourquoi trier suivant le métier par ordre léxicographique ???

    Pourquoi Artisan Ebeniste serait avant Baby Sitter: est-il plus noble de s'occuper du bois que de s'occuper des enfants, et pourquoi Bandit de Grand Chemin serait avant Fonctionnaire de Police ... allez je plaisante et puis c'est complétement hors sujet, ah non promis j'arrête ...


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50
  2. [JNI]exception_access_violation : tableau string
    Par tambourin dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 02/12/2004, 16h24
  3. [débutant] tri vecteur string ordre alphabétique
    Par Tom Sawyer dans le forum SL & STL
    Réponses: 2
    Dernier message: 26/07/2004, 17h40
  4. Réponses: 3
    Dernier message: 26/05/2004, 23h03
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo