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

C# Discussion :

boucles foreach imbriquées!


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut boucles foreach imbriquées!
    Bonjour tout le monde,

    J'ai un problème qui me rend digue!!!

    voici mon programme:

    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
     
     
    ArrayList petiteliste=new ArrayList ();
    ArrayList grandeliste=new ArrayList();
     
    for(int i=0;i<3;i++)
    {
         for(int j=0;j<2;j++)
         {
             petiteliste.Add(j);
         }
         grandeliste.Add(petiteliste);
    }
     
    string chaine="";
     
    foreach(ArrayList pl in grandeliste)
     {
        foreach(int elm in pl)
        {
           chaine=chaine+""+elm.ToString();
        }
     }
    voici le resultat que j'obtiens:

    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

    Est ce que quelqu'un trouve ça illogique???

    Merci de m'aider

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le résultalt est tout à fait logique. Qu'est qui est anormal selon toi ? Sinon ce sera dur de te répondre ^^

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut
    Merci de m'avoir répondu

    Jusque là je croyais que foreach avait le meme comportement que n'importe quel autre type de boucles(for,while,...)

    Ce que j'essaie de faire dans mon bout de code c'est simplement d'afficher tous les elements de ma grandeliste (les entiers) mais là j'ai l'impression qu'il refait cet affichage 3 fois (autant de fois qu'il ya d'itérations dans la première boucle)

    Est ce qu'il ya une solution à ça en utilisant precisément des boucles foreach ?

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Je pense que le problème vient de la façon dont tu construis tes listes. Cela génère un résultat auquel tu ne t'attendais pas au final.

    Tel que c'est codé, tu ajoutes 3 fois la même instance (petiteliste) dans grandeliste, donc tu auras 3 fois la même liste. Quand tu sors de tes boucles for, grandeliste contient 3 références à petiteliste. Comme à la fin, petiteliste contient 010101, et bien tu te retrouves avec 010101 3 fois.

    Je pense que c'est de là que vient ton incompréhension.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut
    Mais vous ne croyez pas que chaque petite liste contient uniquement 01 puisque la boucle for à l'intérieur va de 0 à 1 ??
    au moins c'est ce que j'avais l'intention de faire

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le problème c'est que tu utilises la même instance de petiteliste tout du long, donc au final tu as une et une seule petiteliste, pas plusieurs. Donc tu viens la compléter à chaque boucle. Je ne sais pas si c'est très clair par écrit, un dessin serait plus simple je crois ^^

    En fait, il faut que tu instancies une nouvelle petiteliste à chaque fois que tu en as ajoutée une à grandeliste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grandeliste.Add(petiteliste);
    petiteliste = new ArrayList();
    En faisant ainsi, tu auras bien 3 instances et non une seule, et tu auras 010101 dans ta chaîne. C'est à priori ce que tu attendais comme résultat.

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

Discussions similaires

  1. boucles foreach imbriqué (tableau 3 colonnes)
    Par claire34 dans le forum Langage
    Réponses: 8
    Dernier message: 02/12/2010, 18h46
  2. Boucles foreach imbriquées: affichage non désiré
    Par renaud26 dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2009, 08h36
  3. [Dates] foreach imbrique ?
    Par pascale86 dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2005, 12h04
  4. [Tableaux] Boucle while imbriquer
    Par Le-Cortex dans le forum Langage
    Réponses: 11
    Dernier message: 09/09/2005, 14h22
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

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