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 :

imbrication de classe et arraylist


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut imbrication de classe et arraylist
    bonjour,

    je souhaite réaliser une structure d'objets de dessins:

    class point{double x , y;}

    class courbe {ArrayList<point> courbe;}

    class forme {ArrayList<courbe> forme;}

    class dessin {Arraylist<forme> dessin;}

    je ne sais pas comment déclarer et initialiser les éléments à chaque fois eclipse indique une erreur. J'aurai aimé faire dessin[forme][courbe][0] etc pour accéder aux éléments apparemment je m'y prends mal, si vous pouvez me donner un conseil.

    Merci d'avance
    a+

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Je ne comprends pas totalement ce que tu cherche à faire.
    Sinon on ne parcour pas une ligne avec [] mais .get(int index).
    Peut-être qu'ici ce qu'il te faut c'est des map qui associent une clé à une valeur.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut complément
    bonjour,

    merci.

    pour le get j'ai écris un raccourci d'écriture, je comprend qu'il faut utiliser get.

    je cherche à lire un fichier et à le mettre en mémoire, ce fichier contient des dessins, chaque dessin contient des formes, chaque forme contient une liste de point 2D, et chaque point contient X et Y.

    Toutes les données sont variables en taille (sauf le point qui est constitué de x et y uniquement) c'est pourquoi j'ai pensé utiliser un arraylist. Est-ce que c'est possible ?

    J'espère être plus clair.

    a+

  4. #4
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Oui c'est possible, et ta structure de données a l'air cohérente.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    ben ça marche pas...
    pour déclarer j'ai essayé de faire :

    dessin de = new dessin();
    de.forme = new ArrayList<String>();

    et après ?

    je peux pas écrire
    de.forme.curve = new ArrayList<String>();

    ça marche pas, en fait y'a un truc de fondamental que je n'ai pas compris...

    sinon j'ai vu que je peux utiliser .getClass() mais je n'ai pas trouvé d'exempl valable. Comment allouer les variables ? Comment affecter ?

    de.forme.curve.get(index) fonctionnet pas...

    Si tu peux m'aider ?

    Merci

  6. #6
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Est ce que tu peux nous montrer le code que tu as écris?
    D'après ce que tu dis tu ne devrait pas avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    de.forme = new ArrayList<String>();
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    de.forme = new ArrayList<courbe>();
    Pour plus de facilité tes ArrayList peuvent être initialisé dans le constructeur de chaque classe.
    Autre chose par convention on met un majuscule au début du nom de chaque classe (ça permet de s'y retrouver mieux entre les classes et les variables).

  7. #7
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    En fait tu peut pas allouer la liste pour tous tes elements d'un coup.
    Il fa être obligé de faire : de.forme.get(0).curve = new ...

    Sinon tu peut allouer ta liste dans ta déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class point{double x , y;}
     
    class courbe {ArrayList<point> courbe = new ArrayList<point>();}
     
    class forme {ArrayList<courbe> forme = new ArrayList<courbe>();}
     
    class dessin {Arraylist<forme> dessin = new ArrayList<forme>();}

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re,
    voici le code, en fait je peux pas faire de.forme mais de.dessin fonctionne, le de.dessin.get(0).forme fonctionne, super ! merci. Si vous pouvez me confirmer que de.forme n'est pas joignable ?

    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
    void initPolice(int police){
    	XmlUtils xu = new XmlUtils();
    	Dessin de = new Dessin();
    	de.dessin = new ArrayList<Forme>();
    	de.dessin.get(0).forme.get(0).courbe.get(0).x = 10;
    	de.dessin.get(0).forme.get(0).courbe.get(0).y = 20;
     
    }
     
    class Dessin{
    	//src.XmlUtils.PropertiesFile pf;
    	ArrayList<Forme> dessin = new ArrayList<Forme>();
    }
     
    class Forme{
    	ArrayList<Courbe> forme = new ArrayList<Courbe>();
    }
     
    class Courbe{
    	ArrayList<Point> courbe = new ArrayList<Point>();
    }	
     
    class Point{
    	double x;
    	double y;
    }
    si j'alloue la liste dans la déclaration je n'ai plus besoin de le faire dans l'appel de la fonction, c'est donc plus simple ? Est-ce que l'accès aux données est faites de cette manière ?


  9. #9
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Oui tu pourras sans problèmes accéder à la liste, par contre allouer une liste ne peut pas dire qu'elle est pleiné.

    Si on alloue dans la déclaration il ne sera alors plus utile d'instancier à la main en effet.

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    par contre allouer une liste ne peut pas dire qu'elle est pleiné.
    ça veut dire quoi ?

  11. #11
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Ca veux dire que la liste est pleinne de null.

  12. #12
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par Torg666 Voir le message
    Ca veux dire que la liste est pleinne de null.
    Non ca veut dire qu'elle a une taille de 0. Elle est même pas pleine de null, elle est vide, mais elle a le mérite d'éxister .

  13. #13
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par Alain Defrance Voir le message
    Non ca veut dire qu'elle a une taille de 0. Elle est même pas pleine de null, elle est vide, mais elle a le mérite d'éxister .
    Arf oui.... je suis parti un peu vite sur les tableaux moi.

    Sinon dans le cas d'un tableau, les elements eux sont null!

  14. #14
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par Torg666 Voir le message
    Sinon dans le cas d'un tableau, les elements eux sont null!
    Sauf si c'est un tableau de primitif, dans ce cas tous les élements possèdent par défaut la valeur par défaut du primitif.

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    Non ca veut dire qu'elle a une taille de 0
    le fait de mettre ArrayList crée automatiquement une zone lorsque je fais un .add, non ? sinon je me demande si je dois faire un class c = new class() ? car je ne sais pas comment faire... sinon si je fais :

    de.dessin.listLetter.add(e) mais dans ce cas le e est un élément de type forme par exemple et je dois l'initialiser...

    comment réserver l'espace mémoire nécessaire ? et comment affecter les données ? je vais recevoir du fichier des point x, y, contenu dans des courbes etc



    merci d'avance

  16. #16
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Salut,

    Il est certainement nécéssaire de clarifier un certain nombre de choses pour une meilleur compréhension.
    ArrayList n'est qu'une sorte d'index. Elle ne stockera rien, elle va juste référencer ce qu'on lui demande.

    Donc lorsque l'ont va l'allouer (c'est à dire réserver l'espace en mémoire) avec new ArrayList<UnTypePrealablementDefini>(), on va allouer seulement un système qui permettra de parcourir quelque chose en mémoire pour peu que ce quelque chose soit référence par la liste. Ensuite lorsqu'on voudra ajouter une instance à la liste, avant de l'ajouter on va préalablement l'allouer (par exemple new UnTypePrealablementDefini()) et c'est à ce moment là que la mémoire pour uniquement cette instance sera réservée. Par la suite quand on invoquera .add(unTypeQuiVientDetreInstancie), on demandera simplement à la liste de contenir une référence vers cet élément. C'est une manière élégante d'avoir des ensembles de données à taille variable.

    Pour revenir à la classe Class, elle sert principalement à l'introspection/intercession/reflexion, c'est à dire la récupération et la manipulation des méta données d'un programme, c'est à dire que ce n'est absolument pas ce qu'on cherche à faire ici.

    PS : en vrai Arraylist utilisera des tableaux (comme son nom l'indique), mais on a pas besoin de le savoir pour l'utiliser (à part pour optimiser le choix de l'implémentation de l'interface List).

Discussions similaires

  1. classe dans arraylist
    Par grospatapouf dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/12/2008, 07h33
  2. probleme imbrication des classes
    Par touane dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 04/12/2007, 15h14
  3. [POO] Imbrication de classes
    Par warrios dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2007, 00h11
  4. Serialization d'une classe avec arraylist
    Par jpsegret dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 01/04/2007, 09h46
  5. Imbrication de class
    Par themadmax dans le forum C++
    Réponses: 5
    Dernier message: 29/01/2006, 00h02

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