Bonsoir,
J'essai de cloner une classe en Java mais je rencontre des difficultés. J'ai vu qu'il fallait implémenter Cloneable mais je dois mal m'y prendre.
Voici un résumé de mon problème :
-Une Carton compte un nombre pseudo-aléatoire et un ensemble de méthode associés
-Une liste compte une série de 6 cartons à travers un arrayList et un ensemble de méthode
-On donne à chaque joueur la même liste contenant les même 6 cartons. Chaque joueur manipulera ensuite ces 6 cartons de manière indépendante
-Les joueurs sont créés dans la classe Partie.
Voici les passages clés du code source, je n'ai pas mis toutes les méthodes, getters et setters, si vous voulez quelque chose je vous le donnerai :
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 public class Carton implements Cloneable { private int valeur; public Carton() { this.valeur = 0; } public Object clone() { Carton carton= new Carton(); try { carton = (Carton) super.clone(); } catch(CloneNotSupportedException cnse) { cnse.printStackTrace(System.err); } return carton; } }
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class Liste implements Cloneable { private ArrayList<Carton> liste; public Liste() { liste = new ArrayList<Carton>(); int[] choix = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 25, 50, 75, 100}; int aleatoire; int nbChoix = choix.length; for(int i=0; i<6; i++) { this.liste.add(new Carton()); aleatoire = new Random().nextInt(nbChoix); this.liste.get(i).setValeur(choix[aleatoire]); choix[aleatoire] = choix[nbChoix-1]; nbChoix --; } } public Object clone() { Liste liste = null; try { liste = (Liste) super.clone(); } catch(CloneNotSupportedException cnse) { cnse.printStackTrace(System.err); } for(int i=0; i<6; i++) { liste.liste.add((Carton)this.liste.get(i).clone()); } return liste; }
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 public class Joueur { private String pseudo; private int score; private Liste liste; private int compteurCoups; public Joueur() { this.score = 0; this.liste = new Liste(); this.pseudo = "Anonyme"; this.compteurCoups = 0; }Lorsque j'execute, j'ai un seul object liste commun aux différents joueurs. Les modifications apportées par l'un des joueurs modifient donc aussi l'objet pour les autres joueurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public Partie(int nbJoueurs) { Liste li = new Liste(); re = new Resultat(); listeJoueurs = new ArrayList<Joueur>(); for(int i=0; i<nbJoueurs; i++) { listeJoueurs.add(new Joueur()); listeJoueurs.get(i).setListe((Liste)li.clone()); } }
De plus j'ai ma liste qui contient maintenant 6*n éléments pour n joueurs, soit la liste initiale de 6 joueurs décuplée n fois.
Merci de votre aide.
Partager