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 :

Ajouter élément dans un tableau qui se trouve dans un autre tableau


Sujet :

C#

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut Ajouter élément dans un tableau qui se trouve dans un autre tableau
    Bonjour à tous je débute en c# et je bloque vraiment sur un point. Alors je vous explique mon problème : j'ai 3 classes une qui est Bibliotheque une autre Etagere et une autre Document.


    Je dois mettre les documents dans un tableau qui est Etagere, et ces Etageres sont dans un autre tableau qui est la Bibliotheque.

    Pour ajouter des documents à partir de l'étagere j'utilise une méthode qui ajoute un document au premier indice de libre. En suite là ou je bloque c'est que je dois pouvoir ajouter des documents à partir de la bibliothèque à la première au premier indice de la première etagere de libre.

    Voici ma classe Etagere

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    class Etagere
        {
            private int indice;
            private Document[] listeDocument;
            private const int MAX_DOCUMENT = 20;
     
            public Etagere()
            {
                this.listeDocument = new Document[MAX_DOCUMENT] ;
                this.indice = 0;
            }
     
     
     
     
             public void AjouterDocument(Document d)
             {
                 if (EstPleine) { Console.WriteLine("L'étagère est pleine"); }
     
                 else 
                 {
                     listeDocument[indice] = d;
                     indice = indice + 1;
                 }
     
             }
     
             public void AfficherEtagere()
             {
                 for (int i = 0; i < MAX_DOCUMENT; i++)
                 {
                     Console.Write(listeDocument[i]);
                     Console.Write("\n---------case " + i + "\n");
                 }
             }
     
             public bool EstPleine
             {
                 get { return indice > MAX_DOCUMENT; }
             }
     
     
             public Document RechercheDocumentParTitre(string titre)
             {
                 for (int i = 0 ; i < MAX_DOCUMENT ; i++)
                 {
                     if ( listeDocument[i].Titre == titre)
                     return listeDocument[i];                       
                 }
                 return null;
             }
     
     
       }

    Et voici ma classe bibliotheque

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    class Bibliotheque
        {
            private int indice;
            private Etagere[] listEtagere ;
            private const int MAX_ETAGERE = 5 ;
     
     
            public Bibliotheque()
            {
                this.listEtagere = new Etagere[MAX_ETAGERE];
                this.indice = 0;
            }
     
            public bool BiblioEstPleine
             {
                 get {return indice > MAX_ETAGERE;}
             }
     
     
            public void AjouterEtagere(Etagere e)
            {
                if (BiblioEstPleine) { Console.WriteLine(" La bibliothèque est pleine !");}
     
                else
                {
                    listEtagere[indice] = e;
                    indice = indice + 1;
                }
     
            }
     
            public void AjouterDocumentBibliotheque(Document d)
            {
                if (BiblioEstPleine)
                {
                    Console.WriteLine(" La bibliothèque est pleine");
                }
     
                else
                {
     
                }
     
            }
     
     
        }

    Et à partir de là je ne sais pas du tout comment procéder pour le cas où ma bibliothèque n'est pas pleine, trouver une étagère de libre et mettre mon document sur un indice de libre.
    Merci par avance pour votre aide.

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Une façon de faire consiste en des boucles foreach.
    Tu parcours ta bibliothèque pour trouver la première étagère ayant de la place
    Un fois que tu as trouvé ta bibliothèque tu casse la boucle (avec un return ou un break, selon tes choix d'implémentation).
    Tu appelles ta méthode d'ajout sur ton étagère...

    Ce n'est peut-être pas la façon la plus élégante de faire, mais pour apprendre et comencer c'est pas trop mal. Avec du link et des expressions lambda tu auras du code plus élégant (qui au final fera la même chose, car interprété pareil en il)

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bibliotheque.listEtagere.Where(e => !e.EstPleine).FirstOrDefault();
    te retournera la première étagère non pleine ou null si elles sont toutes pleines.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut
    Merci pour vos réponses. kheironn t'as manière me parait plutôt bien et assez facile pour moi à mettre en place. Mais j'ai une petite question comment je fais pour appeler la méthode d'ajout de la classe étagère dans ma classe bibliothèque ?

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Citation Envoyé par Hekinox Voir le message
    Merci pour vos réponses. kheironn t'as manière me parait plutôt bien et assez facile pour moi à mettre en place. Mais j'ai une petite question comment je fais pour appeler la méthode d'ajout de la classe étagère dans ma classe bibliothèque ?
    En itérant sur ta liste d'étagères dans la bibliothèque, ta boucle te permettra de trouver un élément étagère ayant une place libre (la première occurance).
    De là, tu manipules normalement ton étagère avec ses méthodes et propriétés

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Justement, je me suis dis qu'en balançant une requête LinQ toute fraiche, si la personne ne connait ni d'Eve ni d'Adam, elle va forcément faire des recherches.

    Demain, on me donne une solution pour éviter de boucler dans une boucle, je me renseigne direct, déjà par curiosité (un dev pas curieux, c'est pas un dev longtemps ...) et ensuite parce que plus tard je veux pouvoir réaliser le truc.

    Par contre, quand tu débutes en LinQ et que t'as pas d'exemple concret, je suis pas sur que y'ait des exemples explicites sur la msdn avec des lambdas (je ds ça au pif j'ai pas regardé). Y'a pas mal de fois où on m'a dit "regarde ça sur msdn" et que l'exemple était à chier. Et à chaque fois en trouvant des samples de code j'ai fais "Ahhhhhhhh ok !".

    Après, vu qu'il est débutant c'est à lui de faire ses choix. Soit il prend le truc et fait un c/c et ça marche tant mieux. Soit il fait des recherches et il prend en compétences et la ça vaut le coup. On va pas non plus gérer la pédagogie de tous les débutants sur le forum
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bibliotheque.listEtagere.Where(e => !e.EstPleine).FirstOrDefault();
    te retournera la première étagère non pleine ou null si elles sont toutes pleines.
    oh du tout cuit dans le bec !
    c'est dommage de donner une réponse si facilement trouvable... d'autant plus qu'avec ma réponse, il était orienté vers les pistes à suivre...
    LinQ, c'est bien, mais il faut savoir ce qu'il y a derrière et comment ferait notre posteur en 1.1 ???

Discussions similaires

  1. compter un élément qui se trouve dans un tableau d'un autre
    Par tonton.odilon dans le forum Langage
    Réponses: 4
    Dernier message: 17/06/2015, 20h07
  2. [XL-2013] Copier cellules en ligne dans une colonne qui se trouve dans un autre classeur
    Par Wushugringo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2015, 08h07
  3. Réponses: 2
    Dernier message: 13/06/2012, 16h01
  4. Réponses: 2
    Dernier message: 31/07/2008, 10h07
  5. Réponses: 2
    Dernier message: 12/11/2007, 21h04

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