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 :

Création d'objet récursivement


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut Création d'objet récursivement
    Bonjour à tous,

    je vous explique mon petit problème :

    J'ai créé une classe qui me permet de créer des Objets, jusque là, ca vas

    Le truc, c'est que je dois créer un certain nombre de ces objets à l'execution du programme. Ce nombre d'objet est dynamique et dépend d'un fichier XML, donc en gros d'un tableau de tableau de tableau...

    J'ai fait comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	class Zone {
    		private Element XML;
    		private Object[] SousZone;
     
    		Zone(Element ZONE) {
    			XML = ZONE;			
    			List LsZone = ZONE.getChildren();
    			int NbZone = LsZone.size();
    			for (int i = 0; i < NbZone; i++) {
    				SousZone[i] = new Zone((Element) LsZone.get(i));
    			}
    		}
    	}
    Le truc c'est que ca marche pas, j'ai trifouillé dans tout les sens, mais le programme n'execute que la premiere boucle de la boucle for. Des qu'il refait un Objet la derniere boucle for semble perdu. Je me retrouve avec comme objet, juste la premiere case de la premiere case de la premiere case du tableau....

    Donc avec ce genre de chose : [[[1],[2]],[3]]

    J'ai : [[1],[2]]; [1]

    Alors qu'il me faudrais : [[1],[2]]; [3]; [1]; [2]

    De plus, quand il fini il ne passe pas à la suite, il semble bloqué dans une boucle infinie mais je vois pas d'où ca viens.

    Je sais pas si c'est très clair, d'habitude j'ai pas trop de mal à faire des truc récursif avec des fonctions toute simple, Estce que c'est different en Java ? ou juste pour les classes ?

    Si quelqu'un pouvais m'aider à faire marcher mon truc ca serais sympa

    Merci d'avance

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Ta variable i est initialisée dans la boucle for, donc à chaque nouvelle récursion : for (int i = 0; i < NbZone; i++)

    Or cette variable sert à remplir le tableau en variable globale SousZone : SousZone[i] = new Zone(...

    Donc, chaque nouvelle récursion écrase le résultat de la précédente.

    Donc au final tu as n'importe quoi

  3. #3
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    En fait ca c'est pas grave

    J'ai pas encore trop regardé comment j'allais ranger mes Objets, ce que je regarde c'est le nombre d'objet que ca me donne (avec un bête Systeme.out.println). Et ce que je vois c'est qu'il ne me créer pas assez d'objet.

    Bon j'ai pas trop compris ton explication mais je pense que tu as raison quand tu dit que c'est la boucle for qui bug !

    Je vais voir ca merci ^^

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Plusieurs choses...

    Pour la structure, déjà, n'utilise pas des tableaux de tableaux (de tableaux de tableau...) : le concept d'objet est là pour ça (entre autres)... Tu fais des Objets qui contiennent des objets...

    Ensuite, il existe une API qui s'appelle DOM, qui permet de parser du XML et qui te stocke ton fichier xml sous forme d'arbre, donc c'est déjà tout fait ce que tu veux faire

  5. #5
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    En fait j'ai réussit en faisant comme ca (si jamais ca interresse quelqu'un ^^)

    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
     
    	class Zone {
    		private Element XML;
     
    		private Vector ListeJoueur = new Vector();
     
    		private Vector SousZone = new Vector();
     
    		private Zone ZoneParente;
     
    		private int Num;
     
    		private Zone(Element ZONE, Zone PARENTE, int NUM) {
    			XML = ZONE;
    			ZoneParente = PARENTE;
    			Num = NUM;
    			System.out.println(XML_toString(XML));
    			if (XML.getParentElement() != null) {
    				if (Num + 1 < XML.getParentElement().getContentSize()) {
    					ZoneParente.SousZone.add(new Zone((Element) XML.getParentElement().getContent(Num + 1), ZoneParente, Num + 1));
    				}
    			}
    			if (XML.getContentSize() != 0) {
    				SousZone.add(new Zone((Element) XML.getContent(0), this, 0));
    			}
    		}
    	}
    Bon ya d'autres trucs qui vont pas, mais la au moins il me crée le bon nombre d'objet.

    Pour la structure, déjà, n'utilise pas des tableaux de tableaux (de tableaux de tableau...) : le concept d'objet est là pour ça (entre autres)... Tu fais des Objets qui contiennent des objets...
    En fait j'ai une autre question par rapport à ça :
    Je crée les Objets dynamiquement, donc je peux pas leurs donner des noms de variables précis (c'est pour ca que je les rangent dans un tableau). Ya t'il une autre facon de faire ? (pour pouvoir par la suite manipuler les objets créer)

  6. #6
    Membre éprouvé Avatar de BlackWood
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    En fait, la classe Vector est déconseillée.
    Mieux vaut utiliser une ArrayList ou encore une HashMap (celle si te permettrai d'ailleurs de "nommer" tes objets par la clé.)

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

Discussions similaires

  1. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  2. création d'objet en mémoire partagé
    Par BigNic dans le forum C++
    Réponses: 6
    Dernier message: 28/11/2005, 18h41
  3. Réponses: 11
    Dernier message: 16/10/2005, 20h21
  4. [JMenuBar] Création d'objets à la volée
    Par Rampa dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 13h56
  5. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00

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