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

Langage Java Discussion :

Encore problème d'imbrication de boucles


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut Encore problème d'imbrication de boucles
    Bonjour,
    j'ai encore un souci avec l'imbrication des boucles for,je croyais que c'était résolu depuis ma dernière discussion..
    j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for (iter = product.values().iterator(); iter.hasNext();)
             { productID =((Integer)iter.next());
    for (Iterator itr = clients.keySet().iterator(); itr.hasNext();) {
    	aClientId = (Integer)itr.next();
    	for (Iterator itr2 = clients.keySet().iterator(); itr2.hasNext();) {
    		bClientId = (Integer)itr2.next();
    		if (aClientId != bClientId) {
                rapp = getRapp(aClientId,bClientId);
                form = rapp*getNbr();
    			System.out.println( aClientId+"|"+ productID+"|"+form);
    		}
    	}
    }
    on dirait que c'est une boucle infinie, ça m'affiche:
    aClient1|product1|form
    aClient1|product1|form
    aClient1|product1|form
    aClient2|product2|form
    aClient2|product2|form
    aClient3|product3|form
    aClient3|product3|form
    aClient3|product3|form
    ...............ça génère des millions de lignes

    Normalement ça devrait afficher une seule valeur "form" par "aClient" et par "product", ça ne devrait pas se répéter.
    et il doit y avoir finalement 10000 valeurs correspondant au nombre de aClient et de produits que j'ai dans mon fichier d'entrée.
    Merci pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Avec la balise ça serait plus lisible.

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Tu fais une double boucle sur ta map "client", donc pour chaque client, tu vas afficher (nombre_clients -1) fois ce client par produit... Peut-être devrais-tu cumuler pour chaque client avant d'afficher ?

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    En fait le productID et aClient, je les récupère d'une même HashMap où les keys sont les aClients et les values sont les products. et j'ai besoin de récupérer à la fin 10000 résultats, correspondant aux itérations sur cette même HashMap.
    concernant le bClient, je le récupère d'une autre HashMap indépendante.
    j'ai essayé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Iterator iter = clients.values().iterator(); iter.hasNext();
    for (Iterator itr = clients.keySet().iterator(); itr.hasNext() {
    aClientId = (Integer)itr.next();
    productID =((Integer)iter.next());
    for (Iterator itr2 = clients.keySet().iterator(); itr2.hasNext() {
    bClientId = (Integer)itr2.next();
    if (aClientId != bClientId) {
    rapp = getRapp(aClientId,bClientId);
    form = rapp*getNbr();
    System.out.println( aClientId+"|"+ productID+"|"+form);
    }
    }
    }
    ça me donne une seule valeur par aClient et par product:
    aClient1|product1|form
    aClient2|product3|form
    aClient3|product4|form
    il fait pas toutes les itérations pour chauqe aClient.

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    N'hésite pas à utiliser les foreach plutot que les iterators, ça fait un code plus léger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (Map.Entry<t1, t2> e : clients.keyset())
    {
      e.getKey();
      e.getValue();
    }
    Du coup, si j'ai bien compris ton code ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (Map.Entry<Integer, Product> entA : clientsA.keySet())
       for (Map.Entry<Integer, Product> entB : clientsB.keySet())
            if (! entA.getKey().equals(entB.getKey()))
               // blabla
    Maintenant, ton explication de la boucle est mi-claire du coup je suis peut etre à coté de la plaque.

Discussions similaires

  1. Encore problème avec ma boucle (2 pas )
    Par Medoou dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/07/2009, 23h21
  2. [Débutant]Encore problème Makefile
    Par Clark dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 31/05/2006, 16h06
  3. Problème de Tableaux et Boucle
    Par elhosni dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/05/2006, 01h35
  4. encore problème virtual hosting
    Par jillthe1 dans le forum Apache
    Réponses: 3
    Dernier message: 27/01/2006, 21h45
  5. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36

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