Probleme lié à la liste d'objet et variable commune
Résolu
Makuzepo
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Makuzepo Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Makuzepo Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille sur un projet de jeu en Java. J'ai fait plusieurs class : ma fenetre, mes panneaux, mes monstres, mes map etc...
Le probleme est que je crée une Arraylist<Monstre> pour ranger mes objets monstres, chaque monstre est initialisé avec les mêmes attributs sauf pour leur rang (ça me permet de faire la différence entre eux et de gérer leur ordre d'apparition), cependant lorsque j'initialise la valeur de rang pour un objet cette modification s'applique à tous mes objets !! Et ce n'est pas ce que je veux. Je ne sais pas où est mon erreur. Si vous avez des idées je suis preneur.
En vous remerciant d'avance !
Voici ce que j'ai :
à l'initialisation :
Place 0
Place 1
Place 2
Place 3
Place 4
Place 5
Place 6
Place 7
Place 8
Place 9
et quand je vérifie dans une deuxieme boucle:
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Ma boucle d'initialisation est:
horde étant ma ArraylList. Size la taille.
Ma boucle de verif :
Je travaille sur un projet de jeu en Java. J'ai fait plusieurs class : ma fenetre, mes panneaux, mes monstres, mes map etc...
Le probleme est que je crée une Arraylist<Monstre> pour ranger mes objets monstres, chaque monstre est initialisé avec les mêmes attributs sauf pour leur rang (ça me permet de faire la différence entre eux et de gérer leur ordre d'apparition), cependant lorsque j'initialise la valeur de rang pour un objet cette modification s'applique à tous mes objets !! Et ce n'est pas ce que je veux. Je ne sais pas où est mon erreur. Si vous avez des idées je suis preneur.
En vous remerciant d'avance !
Voici ce que j'ai :
à l'initialisation :
Place 0
Place 1
Place 2
Place 3
Place 4
Place 5
Place 6
Place 7
Place 8
Place 9
et quand je vérifie dans une deuxieme boucle:
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Place 2 9
Ma boucle d'initialisation est:
horde étant ma ArraylList. Size la taille.
for (int i = 0; i<size; i++){
Monstre mons = new Monstre();
horde.add(mons);
horde.get(i).setPlace(i);
System.out.println("Place "+horde.get(i).place);
}
Ma boucle de verif :
for (int i = 0; i<horde.size(); i++){
System.out.println("Place 2 "+horde.get(i).place);
}
A voir également:
- Probleme lié à la liste d'objet et variable commune
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Vente objet occasion entre particulier - Guide
- Site dangereux liste - Guide
1 réponse
Bonjour,
J'éviterai d'utiliser get(i) comme tu l'as fait à l'ajout dans la liste, on peut s'en passer et c'est pas plus mal, car rien ne garanti que ta liste soit vide au départ et dans ce cas tu vas être décalé.
Ceci étant dit ton problème doit être ailleurs.
Il faudrait voir comment tu as déclaré ton attribut place et ta méthode setPlace dans la classe Monstre.
Remarque : normalement tu devrais avoir un getPlace() il faut que tu l'utilises plutôt que passer directement par l'attribut place (qui devrait d'ailleurs être masqué)
J'éviterai d'utiliser get(i) comme tu l'as fait à l'ajout dans la liste, on peut s'en passer et c'est pas plus mal, car rien ne garanti que ta liste soit vide au départ et dans ce cas tu vas être décalé.
for (int i = 0; i<size; i++){ Monstre mons = new Monstre(); mons.setPlace(i); horde.add(mons); System.out.println("Add "+mons.place); } for (int i = 0; i<horde.size(); i++){ System.out.println("Place "+i+": "+horde.get(i).place); }
Ceci étant dit ton problème doit être ailleurs.
Il faudrait voir comment tu as déclaré ton attribut place et ta méthode setPlace dans la classe Monstre.
Remarque : normalement tu devrais avoir un getPlace() il faut que tu l'utilises plutôt que passer directement par l'attribut place (qui devrait d'ailleurs être masqué)
Merci pour tes conseils, j'ai modifié en conséquence. Je pense aussi que mon problème est ailleurs...
Voici ma classe Monstre :
Voici ce que j'obtient :
Place Add 0
Place Add 1
Place Add 2
Place Add 3
Place Add 4
Place Add 5
Place Add 6
Place Add 7
Place Add 8
Place Add 9
i : 0 Place : 9
i : 1 Place : 9
i : 2 Place : 9
i : 3 Place : 9
i : 4 Place : 9
i : 5 Place : 9
i : 6 Place : 9
i : 7 Place : 9
i : 8 Place : 9
i : 9 Place : 9
Remarque : je pense que tu peux déduire certains attributs à partir des autres, il est donc inutile de les conserver.
Par exemple, tu peux enlever , car tu peux le calculer avec ...
Il en a va sûrement de même pour front, back, up et down qui doivent se calculer à partir de posX et posY (selon ce que tu veux faire).
Comme ma variable n'était plus en static, la valeur ne pouvait pas changer, je suis donc passé par le constructeur pour définir sa place:
Voila ce que j'ai maintenant :
Place Add 0
Place Add 1
Place Add 2
Place Add 3
Place Add 4
Place Add 5
Place Add 6
Place Add 7
Place Add 8
Place Add 9
Place i : 0 : 0
Place i : 1 : 1
Place i : 2 : 2
Place i : 3 : 3
Place i : 4 : 4
Place i : 5 : 5
Place i : 6 : 6
Place i : 7 : 7
Place i : 8 : 8
Place i : 9 : 9
Merci en tout cas. Tu as été rapide et efficace !!
A bientôt !