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

Collection et Stream Java Discussion :

Tableau d'objets dont l'un est un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut Tableau d'objets dont l'un est un tableau
    Bonjour, je souhaite créer une méthode dont la finalité est de créer une JMenuBar.
    J'aimerais qu'elle prenne en paramètres le nom de la JMenuBar à créer, son libellé, et un tableau donnant les noms (1ère dimension) et libellés (2è dimension) de chaque JMenu et un autre tableau (3è dimension) listant les noms et libellés des JMenuItems correspondant à chaque JMenu.
    Tout d'abord, je voudrais savoir si le fait de faire un tableau d'objets à 3 dimensions (String, String, String[]) n'est pas une erreur. Ensuite, si cette solution est bonne, je voudrais savoir comment accéder aux données du tableau de sous-menus.

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Une approche plus objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MenuEntry {
      String name;
      String label;
      MenuEntry[] children;
     
      MenuEntry(String name, String label, MenuEntry... children) {
      }
    }
     
    public void createJMenuBar(String name, String label, MenuEntry... entries) {
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Oui merci herve91, tu as raison, une classe serait la meilleure solution. Je vais l'appliquer. Pour info, si je devais faire face à un tableau tel que je l'ai décrit, tu saurais comment accéder au tableau contenu dedans ?

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    Salut,

    Voila comment déclarer un tableau à 3 dimension :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    String[][][] tableau = new String[x][y][z];
     
    //Exemple pour afficher tout le contenue du tableau 
     
            for(int x = 0; x < tableau.length; x++){
                for(int y = 0; y < tableau[x].length; y++){
                    for(int z = 0; z < tableau[x][y].length; z++){
                        System.out.println("tableau[" + x + "][" + y + "][" + z + "] : " + tableau[x][y][z]);
                    }
                }
            }
    Voila j'espère avoir répondu à ta question.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Tu y as partiellement répondu. En fait, je voudrais savoir comment accéder aux données d'un tableau contenu dans un autre. Par exemple :
    String nom = new String("name");
    String libelle = new String("label");
    String[][] tableau = {{"nomSousMenu1", "libelleSousMenu1"},
    {"nomSousMenu2", "libelleSousMenu2"},
    {"nomSousMenu3", "libelleSousMenu3"}};
    Object[][][] tab = {nom, libelle, tableau};

    Comment accéder au contenu de tableau pendant que l'on parcourt la troisième dimension de tab ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Tu le cast en (String[][]). Mais c'est une abomination, hein.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Ca ne résoud pas le problème. Je crois que j'ai du mal à me faire comprendre. Le tableau String[][] tableau contient les nom et libellés des sous-menus correspondant à chaque menu. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Nom du premier menu
    tab[0][0][0] = "Menu1"
    //Libellé du premier menu
    tab[0][1][0] = "Premier menu"
    //Tableau des sous-menus du premier menu
    tab[0][0][1] = tableau
    Ce que je veux savoir, c'est ce qu'il faut écrire pour faire ce que j'ai écrit dans les commentaires suivants :
    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
     
    for(int x = 0; x < tab.length; x++)
    {
        for(int y = 0; y < tab[x].length; y++)
        {
            for(int z = 0; z < tab[x][y].length; z++)
            {
                //Ici je veux pouvoir récupérer le nom du premier sous-menu
                //soit tableau[0][0]
                ...
     
                //Ici je veux pouvoir récupérer le libellé du premier sous-menu
                //soit tableau[0][1]
                ...
            }
        }
    }
    J'espère que j'ai été plus claire ... Et merci pour vos réponses.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    C'est super tordu ce que tu veux faire. Pourquoi tu n'utilise pas des objets ? Parce exemple tu fais une classe Menu qui a comme attribut : nom et une liste ou un tableau de String qui auront le libellé des sous-menus comme valeur. Je trouve ça carrément plus simple.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Oui merci herve91, tu as raison, une classe serait la meilleure solution. Je vais l'appliquer. Pour info, si je devais faire face à un tableau tel que je l'ai décrit, tu saurais comment accéder au tableau contenu dedans ?
    Mon problème est déjà résolu via un objet. N'empêche que je voudrais savoir comment on fait pour accéder aux données d'un tableau lorsque l'on parcourt celui qui le contient, c'est juste par curiosité. Ca me travaille de ne pas savoir

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Je vois pas en quoi j'ai pas répondu à cette question. Il est hors de question que j'essaie de décrypter la logique organisationnelle de tes données d'exemple et que je montre précisément comment faire dans ce cas-là.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Pour le problème que j'ai mentionné au départ, la meilleure solution est de créer une classe, chose que j'ai appliquée et qui fonctionne très bien. Je sais bien que ce que j'ai exposé comme problème se résoud par une classe et que donc, dans cet exemple bien précis, il n'est pas obligatoire de devoir passer par un tableau contenu dans un tableau.
    Passons maintenant au niveau purement théorique, sans forcément avoir une application pratique derrière. SI, et je dis bien SI, on se trouvait dans un cas où il n'y avait pas d'autre solution que ce que j'ai exposé (oubliez les menus et sous-menus puisque l'on parle seulement de théorie), comment feriez-vous pour accéder aux données d'un tableau contenu dans un tableau ? Si c'est impossible, dites-moi que c'est impossible et je lâcherai le morceau. Sinon, PAR CURIOSITE, j'aimerais bien savoir comment on peut faire.
    Dans les 2 cas, merci à ceux qui ont pris la peine de se pencher sur la question.

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Cast - ton - Object - en - String[][]

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    De quel objet parles-tu ?
    tableau est déjà un String[][]

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Ah c'est ça que tu comprenais pas ? Je reviens de loin, moi -_-°.

    tableau est déjà un String[][]
    C'est bien possible, mais vu qu'il est stocké dans un Object[][][], le compilateur ne risque pas de le savoir. Pour lui c'est un Object. Solution : cast en String[][].

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Bon je pense que vous allez me trouver bien lourde, mais c'est avec les indices de parcours que j'ai un souci. Ca ressemble à un truc comme ç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
    17
    18
    19
    20
    21
     
    for(int x = 0; x < tab.length; x++)
    {
        for(int y = 0; y < tab[x].length; y++)
        {
            for(int z = 0; z < tab[x][y].length; z++)
            {
                for(int m = 0; m < tab[x][y][z].length; m++)
                {
                    //Ici je veux pouvoir récupérer le nom du premier sous-menu
                    //soit tableau[0][0]
                    String a = new String(tab[x][y][z][m][0].toString());
     
                    //Ici je veux pouvoir récupérer le libellé du premier sous-menu
                    //soit tableau[0][1]
     
                    String b = new String(tab[x][y][z][m][1].toString());
                }
            }
        }
    }
    Ne faites pas attention à a et b, je ne me suis pas cassé la tête et je sais qu'à chaque boucle elles seront écrasées, mais là n'est pas le problème. c'est ça que je trouve bizarre et qui, je pense, est totalement faux :

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    bonjour

    alors déjà moi je commence a avoir sérieusement du mal a partir de la 4eme dimensions

    j'ai juste envi de dire

    et les sous-menu des sous-menu quand tu en aura besoin tu r'ajoute encore 3 dimensions

  17. #17
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Bien que ce soit très moche, restons dans le théorique hein....

    donc ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String a = new String(tab[x][y][z][m][0].toString());
    devrait plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String a = (((String[][])(tab[x][y][z]))[m][0]).toString();
    Après compte pas sur moi pour le tester hein !

    PS : pour utiliser la 5ème dimension :
    tab[x][y][z][m][0]
    Je te conseil de contacter Fox Mulder ou Samantha Carter....

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Euh, tu veux convertir un tableau d'objets en 3 dimensions en tableau de chaînes à 2 dimensions ?!? C'est possible ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String a = ( ( (String[][])(tab[x][y][z]) )[m][0] ).toString();

  19. #19
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    non c'est pas ca :

    retourne l'élement a la position x,y,z du tableau.
    Or, cet élément est un tableau de String : String[][]

    Cependant il est sotcké en tant qu' "Object", donc le cast est nécessaire pour le récuperer sous forme de String[][].

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (String[][])(tab[x][y][z])
    représente bien le tableau de String qui est stocké dans le tableau tab

    Ensuite, on peut donc récuperer un élément particulier de ce tableau, par exemple le [m][0]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((String[][])(tab[x][y][z]))[m][0]
    Ici on a donc un élément du tableau du "sous tableau".

    pour l'afficher, je fais comme tu l'as souhaité, à l'aide de la méthode "toString()"

    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (((String[][])(tab[x][y][z]))[m][0]).toString()
    Pour mettre cela dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String a = (((String[][])(tab[x][y][z]))[m][0]).toString();

    Néanmoins, étant un tableau de String, la méthode "toString()" n'est pas nécessaire pour récuperer l'élément sous forme de string, car il est déja présent sous cette forme dans ton tableau.

    donc au final, cela devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String a = ((String[][])(tab[x][y][z]))[m][0];
    En espérant avoir été assez clair et juste !

  20. #20
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    On peut aussi le dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Object subTab = tab[x][y][z];
    String[][] stringTab = (String[][]) subTab;
    String a = stringTab[m][0];
    Ce qui est une version longue de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String a =  ((String[][])tab[x][y][z])[m][0];

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. un objets dont l'attribut est un autre objet
    Par wafiwafi dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 04/09/2009, 23h27
  2. faire un invoke d'une Methode dont le parametre est un Tableau
    Par pcouas dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/11/2008, 08h12
  3. Tableau à 2 dimensions dont une dimension est un Tableau
    Par Sharkus dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/04/2008, 17h18
  4. Réponses: 3
    Dernier message: 09/01/2007, 15h27
  5. [POO] Désactiver un objet dont le nom est passé en parametre
    Par JavaEli dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/07/2005, 08h47

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