Bonjour à vous,
Merci de m'aider à comprendre le problème ci dessous qui me laisse perplexe:
Le problème est le suivant:
J'ai une classe nommée Coup déclarée comme ci dessous:
Mouvement_unit_pièce est une autre classe définit par ailleurs dans mon programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Coup { Mouvement_unit_pièce mouvement[]; Pièce pièce_mvt; Position_damier damier; int nbre_pièces_mangées; boolean dame;
la classe Coup possède une méthode:
Coup ajouter_mouvement(Mouvement_unit_pièce nouveau_mouvement)
Cette méthode a pour objectif de retourner un objet coup dont le tableau mouvement aura été enrichi du "nouveau_mouvement" en paramètre de la méthode.
Mon problème est que la méthode, non seulement fait ce qui est décrit ci dessus, mais met aussi à jour l'objet "this" auquel s'applique la méthode (ce qui n'est pas du tout l'objectif cherché.
Ci dessous un exemple d'appel de la méthode:
Donc, le souçi comme je l'ai dit, c'est que à la sortie de la méthode, non seulement coup_test_ajout2 possède le nouveau mouvement dans son tableau de mouvement , mais aussi coup_test_ajout. Et là, c'est le drame...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public static void main(String[] args) { ... Mouvement_unit_pièce mouv_test_ajout; // mouvement unitaire utilisé dans le test de la méthode d'ajout mouvement Coup coup_test_ajout, coup_test_ajout2;// Coups utilisés pour le test de la méthode d'ajout mouvement ... coup_test_ajout2 = coup_test_ajout.ajouter_mouvement(mouv_test_ajout); ... }
Voici donc ci-dessous la méthode dont je parle:
J'éspère avoir été à peu près clair et je vous remercie d'avance de m'aider dans ce problème.
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 Coup ajouter_mouvement(Mouvement_unit_pièce nouveau_mouvement) { Coup coup_sortie; coup_sortie = new Coup();// Initialisation du coup qu'on renverra en sortie coup_sortie.mouvement = new Mouvement_unit_pièce[21]; coup_sortie.mouvement = mouvement; coup_sortie.pièce_mvt = pièce_mvt; coup_sortie.damier=damier; coup_sortie.nbre_pièces_mangées = nbre_pièces_mangées; coup_sortie.dame = dame; for (int i=1; i<=21; i++) // On parcours la liste des mouvements de this et lorsqu'on tombe sur un null, on y ajoute le mouvement en entrée { if (coup_sortie.mouvement[i]==null) { coup_sortie.mouvement[i]= new Mouvement_unit_pièce();// on initialise le nouveau mouvement coup_sortie.mouvement[i]= nouveau_mouvement; // C'est ici que le drame se produit: Ici, sans que je comprenne pourquoi, this.mouvement[i] est aussi mis à jour sans que je ne lui demande rien. break; } } return coup_sortie; }
Partager