Salut tout le monde!
J'ai un problème...je sais, brusque entrée en matière mais je bloque complètement.
J'ai utilisé dans mon Projet la classe ArrayList...mais elle fonctionne de façon bizarre, autant dire qu'elle ne fonctionne pas, en fait, voilà en détail:
j'ai besoin de garder en mémoire les coordonnées de deux cases d'une matrice, donc j'ai créé une classe Memory qui contient comme champ :di, dj, ci, cj, et la valeur de la case i-j ,et je fais donc à mon ArrayList mem :
mem.add(new Memory(value, di,dj,ci,cj)
//Memory (char, int,int,int,int) étant le constructeur
et j'ai eu une incohérance donc je ne comprenais pas la cause, alors j'ai décidé d'afficher avant et après chaque add le contenu de mem (mon ArrayList)
1 2 3 4 5 6 7 8
|
for (int k=0;k<mem.size();k++)
System.out.print(mem.get(k).di+"-"+mem.get(k).dj+"|"+mem.get(k).ci+"-"+mem.get(k).cj+"\n");
mem.add(new Memory(grille[i][j].value, i,j,ii,jj));
System.out.print("l'etat du tableau AAAAPTRESt \n");
for (int k=0;k<mem.size();k++)
System.out.print(mem.get(k).di+"-"+mem.get(k).dj+"|"+mem.get(k).ci+"-"+mem.get(k).cj+"\n"); |
et le résultat est étrange, en fait, add ne fait pas qu'ajouter le Memory que je viens de créer, elle remplace TOUS les elt de mem par celui qu'on vient d'ajouter.
J'ai mis en premier un elt dans mem : (-1,-1,-1,-1)
puis j'ai ajouté un (0,0,0,1) et le résultat donne ça :
-1--1|-1--1
l'etat du tableau AAAAPTRESt
0-0|1-0
0-0|1-0
je l'a rappel encore avec (1,1,0,1) et ça affiche ceci:
l'etat du tableau AVANT
0-0|1-0
0-0|1-0
l'etat du tableau AAAAPTRESt
1-1|0-1
1-1|0-1
1-1|0-1
et ainsi de suite, chaque fois, le nombre d'élement augmente, mais les élements semble les même, alors j'ai décidé d'afficher le toString() des elements de mem, pour savoir si c juste un problem de boucle (même si je voyais pas du tout d'où viendrait le blem)et en fait, ça affiche les elements differents, donc apparament, l'operation add modifi tous les elements de l'ArrayList:
l'etat du tableau AVANT
hitori.Memory@124e48f //premier et seul element
l'etat du tableau AAAAPTRESt
hitori.Memory@124e48f //premier element
hitori.Memory@1198ed3 //deuxième element
j'ai retourné le problème dans tous les sens, je ne vois aucune explication. J'ai même essayé avec LinkedList, Vector (je sais, pas bien, c'est deprecated), toujours le même problème
pouvez-vous m'aidez s'il vous plait?
Merci.
PS: Memory :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Memory {
//coordonnée de conflict
public static int ci;
public static int cj;
//coordonnée de deleted
public static int di;
public static int dj;
//la valeur de la case
public static char v;
Memory(char vv, int dii, int djj, int cii, int cjj){
v=vv;
di=dii;
dj=djj;
ci=cii;
cj=cjj;
}
} |
Partager