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:
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;
Mouvement_unit_pièce est une autre classe définit par ailleurs dans mon programme.
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:
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);
...
}
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...

Voici donc ci-dessous la méthode dont je parle:
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;
	}
J'éspère avoir été à peu près clair et je vous remercie d'avance de m'aider dans ce problème.