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

Java Discussion :

Eviter les répétions


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut Eviter les répétions
    Bonjour,

    Imaginez que je parcours une petite liste de mots qui peuvent se répéter exemple :

    maison ; voiture ; toit ; vitre ; arbre ; toit ; voiture ; porte ; lampe ; vitre ; ...

    Et qu'au final je souhaite avoir uniquement cette liste :

    maison
    toit
    arbre
    porte
    lampe
    vitre

    J'ai l'algo pour le parcours etc ... mais comment éviter à chaque fois de reprendre un mot qui a déjà été "pris" ?

    Merci de votre aide

    Cordialement

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Utilises un Set...


    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    Disons qu'actuellement, je parcours un tableau exel.

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int i = 1; i < 15; i++) {
                for (int j = 6; j < 143; j++) {
                    Cell testMot = sheetPers.getCell(i, j);
                    LabelCell motIdentifie = (LabelCell) testMot;
                    MotTrouver = motIdentifie.getString();
                    if (!MotTrouver.isEmpty()) {                    
                        cbxRessource.addItem(MotTrouver);                    
                    }
                }
    Car en faite le but je parcours ma feuille excel et j'ajoute tout les mots différents dans une jcombobox.

    Avec le set comment l'utilise t'on ?

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    http://download.oracle.com/javase/1,5.0/docs/api/

    Utilise un HashSet si tu n'as pas besoin de conserver l'ordre d'insertion, un LinkedHashSet sinon (moins performant, bien sûr, ça a un prix de conserver l'ordre).

    Sinon les HashSet fonctionnent en utilisant le hashCode et la fonction equals, il faut donc les redéfinir précisément pour une classe que tu aurais créé. Si tu utilises String, c'est bien sûr déjà fait, donc tout va bien.

    Enfin, Set est une spécialisation de Collection, donc la plupart des méthodes auxquelles tu es habitué avec les List seront utilisables : add, remove, contains, isEmpty ...

  5. #5
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    http://java.developpez.com/faq/java/...angage_donnees

    Tiens, voilà les explications de base sur les collections, ce que c'est, à quoi ça sert. Je te conseille de lire plus particulièrement les 3 premiers points de la page.

    Une fois que tu auras choisi ce que tu veux utiliser... tu as un lien vers la javadoc sur le post au dessus.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    Merci pour votre aide, je fais quelques tests et je vous tiens au courant.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    Super merci pour votre aide à tous !

    Problème résolu

  8. #8
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    1. Utiliser la balise code rendra plus lisible vos posts. J'ajouterai que la convention Java veut qu'on nomme les classes en commençant par une majuscule, mais les instances avec une minuscule (ici la String "MotTrouver" devrait s'appeler motTrouve).

    2. Une NullPointerException indique qu'on essaye d'accéder à un objet non instancié ... En l'occurence ici les Sets ne le sont pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set<String> test = new HashSet<String>();
    3. Il ne faut pas rajouter le Set dans l'objet, mais faire un Set qui gèrera la redondance, puis ajouter chaque élément du Set dans l'objet "cbxRessource" (d'ailleurs, c'est une instance de quelle classe ?).
    Ça ressemblerait à ça :
    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
     
    Set<String> motsTrouves= new HashSet<String>();
     
    for (int i = 1; i < 15; i++) {
    for (int j = 6; j < 143; j++) {
    Cell testMot = sheetPers.getCell(i, j);
    LabelCell motIdentifie = (LabelCell) testMot;
    MotTrouver = motIdentifie.getString();
    if (!MotTrouver.isEmpty()) {
    motsTrouves.add(MotTrouver);
    }
    }
    }
    for (String mot : motsTrouves) {
    cbxRessource.addItem(mot);
    }
    À noter que là j'ai repris vite fait le code, il serait potentiellement plus performant (si c'est important) d'ajouter directement les objets dans cbxRessource s'ils ne font pas déjà parti du Set :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!MotTrouver.isEmpty() && !motsTrouves.contains(MotTrouver)) {
    cbxRessource.addItem(MotTrouver);
    motsTrouves.add(MotTrouver);
    }

  9. #9
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Salut,

    Heu comme ça à vu de nez et sans avoir pris mon café du matin (c'est pour dire dans quel état je suis ) je dirais deux listes:
    • Ta première liste contenant l'échantillon de tous tes mots
    • Ta deuxième liste (initialement vide) dans laquelle on ajoute au fur et à mesure les mots de ta première liste, en vérifiant à chaque fois si il n'est pas présent déjà dans ta deuxième liste.


    En précisant qu'au final ce que tu cherches sera dans ta deuxième liste.

    Sinon, java.util.ArrayList me semble pas trop mal. A voir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Eviter les warnings "unused parameter"
    Par Le Furet dans le forum C
    Réponses: 9
    Dernier message: 03/10/2005, 22h29
  2. Eviter les doublons
    Par cyrill.gremaud dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2005, 12h37
  3. Réponses: 4
    Dernier message: 13/08/2004, 18h39
  4. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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