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 :

comportement boucle for bizarre


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut comportement boucle for bizarre
    Bonjour à tous,
    Voici mon souci :
    J'ai :
    - 1 ArrayList<Integer> tabSetSource : [0,1,2,3,4,...]
    - 1 ArrayList<Integer> tabSource : [0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,...]
    - 1 ArrayList<String> tabMot qui correspond à tabSource : [mot0,mot1,mot2,mot3,mot4,...]
    Je veux afficher les mots en fonction du tabSetSource et je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (int i = 0; i < tabSetSource.size(); i++) {
         System.out.println("la source " + tabSetSource.get(i) + " a les mots suivants : ");
         for (int j = 0; j < tabSource.size(); j++) {
              if (tabSource.get(j) == tabSetSource.get(i)) {
                System.out.print(tabMot.get(j) + "|");
              }
         }
         System.out.println();
    }
    Cela m'affiche très bien les mots des 127 premières sources. Puis cela ne m'affiche qu'1 seul mot par source !!! Je n'y comprends rien !!!
    Merci de vos réponses !!
    @+

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Quel est la logique derrière tout cela ?
    J'ai essayé ton code avec les données indiquées, mais j'obtiens un IndexOutOfBoundsException...


    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Salut,
    En fait cet exemple n'est qu'un test ! Je cherche derrière tout cela à calculer des fréquences de paires de mots.
    Si dans une source on a mot1, mot2, mot3 et mot4, alors il faut que je forme les paires
    mot1-mot2
    mot1-mot3
    mot1-mot4
    mot2-mot3
    mot2-mot4
    mot3-mot4
    et en comparant les paires une fois formées selon les sources, je calculerai des fréquences de paires.
    Donc la boucle qui me fait réellement ***** c'est la même mais avec une boucle supplémentaire j = i+1 qui me donne les paires à chaque fois.
    Mais pour l'exemple à vous proposer, j'ai pensé qu'il valait mieux enlever cette partie.
    Quant à l'IndexOutOfBoundsException : il faut que tabSource et tabMot aient exactement le même nombre de cases et que tabSetSource n'ait que des entiers qui aillent jusqu'à l'entier maximum de tabSource (en fait c'est un tabSource sans doublons)

    EDIT : en fait je fais ça avec un tabSetSource de taille 3354 et des tabSource et tabMot de taille 15003. Ca marche très bien mais pourquoi ça s'arrête à 127, et après ça n'affiche plus qu'un seul mot, c'est un mystère !

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Mais concrètement :
    • Que cherches-tu à faire ?
    • Quel est le problème ?
    • Quel est le code correspondant ?


    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Concrètement :
    - je récupère des données [source;mot] dans une base de données : je les range dans 2 tableaux ArrayList tabSource et tabMot.
    - j'obtiens donc : tabSource = [0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2 ... 3354,3354,3354] et tabMot = [mot0 à mot5 qui correspondent "virtuellement" à source(0),mot6 à mot10 qui correspondent "virtuellement" à source(1),mot11 à mot16 qui correspondent "virtuellement" à source(2) .... mot15000 à mot 15502 qui correspondent "virtuellement" à source(3354)]
    - je cherche justement, et simplement, à afficher cette correspondance :
    source 1 contient les mots mot0, mot1, mot2, mot3, mot4, mot5
    source 2 contient les mots mot6, mot4, mot8, mot9, mot10
    source 3 contient les mots mot11, mot12, mot13, mot14, mot15, mot16
    ...
    source 3354 contient les mots mot15000, mot15001, mot15002
    - j'ai donc créé un 3ème tableau tabSetSource contenant les sources sans doublons pour pouvoir faire ma boucle et le code est ci-dessous.
    - le problème :
    j'obtiens bien source(1) contient bla bla bla (= le bon nombre de mots et les bons mots) jusqu'à source(127) contient bla bla bla mais à partir de source(128), je n'obtient que bla (1 seul mot par source)

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    En gros tu veux récupérer tous les mots associés à un même Integer ? C'est ça ?

    Si la réponse est oui pourquoi faire si compliqué ? Une Map<Integer,List<String>> serait plus approprié non ?


    a++

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    ouh la la, oui, bien sûr, je n'y avais même pas pensé ... c'est dingue quand on a le nez dans le guidon, on devient vraiment très bête !!!
    je vais faire ça !
    par contre, une suggestion sur le souci ci-dessous ? c'est bizarre quand même non ?
    merci pour tout !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    euh, t'as un exemple de Map<Integer,List<String>> ? est ce que je peux la remplir directement via ma requête ?

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Le plus simple étant de te faire une petite classe pour gérer cela plus facilement (en adaptant éventuellement le type des List/Map à ce que tu veux) :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    public class MultiMap<K, V> {
     
        private final Map<K, List<V>> map = new HashMap<K, List<V>>();
     
        public void put(K key, V value) {
            List<V> list = this.map.get(key);
            if (list==null) {
                list = new ArrayList<V>();
                this.map.put(key, list);
            }
            list.add(value);
        }
     
        public V get(K key) {
            List<V> list = this.map.get(key);
            if (list!=null && !list.isEmpty()) {
                return list.get(0);
            }
            return null;
        }
     
        public List<V> getAll(K key) {
            return this.map.get(key);
        }
     
    }

    Après pour la remplir ca dépend des données que tu as en entrée...

    a++

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Merci !
    Je mets résolu !

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

Discussions similaires

  1. [Batch] Bizarre "goto" dans boucle "for" impossible
    Par hermes6236 dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 06/11/2013, 22h06
  2. [Débutant] boucle FOR bizarre
    Par kanwulf62 dans le forum MATLAB
    Réponses: 4
    Dernier message: 31/05/2013, 10h36
  3. comportement anormal boucle for
    Par virtual_bug dans le forum C++
    Réponses: 6
    Dernier message: 28/02/2012, 11h56
  4. Réponses: 3
    Dernier message: 20/09/2006, 22h35
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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