Bonjour,
J'essaie de modifier un élément d'un tableau, mais lorsque je fais ça, tous les éléments de mon tableau se retrouvent modifiés :
La classe où je déclare la tableau :
Avec la classe Block qui est une private class dans Memory :
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 public class Memory { private enum BlockState { FREE, IN_READING, IN_WRITING, WRITTEN; } /** All the blocks */ private Block[] blocks; /** * Default constructor * Does nothing... */ public Memory() { blocks = new Block[13981]; initializeMemory(); } private void initializeMemory() { Block b = new Block(); for(int i=0;i<blocks.length;i++) { blocks[i] = b; } }
et dans la classe Memory, les fonctions suivantes (en résumé) :
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 private class Block { /** Block state */ private BlockState blockState; /** Image Id */ private int imageId; /** Start date */ Calendar startDate; /** End date */ Calendar endDate; /** * Default constructor * Block State set to FREE * Image Id set to 0 */ public Block() { blockState = BlockState.FREE; imageId = -1; startDate = null; endDate = null; } }
Cette dernière fonction writeOneBlock modifie l'état de tous les indices du tableau à "IN_WRITING". Pourquoi ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void writeBlocks(int startIdx, int nbBlocks, arg...) { for (int i=startIdx;i<startIdx+nbBlocks;i++) { writeOneBlock(i, arg...); } } public void writeOneBlock(int ind, arg...) { // Block State blocks[ind].blockState = BlockState.IN_WRITING; }
Si j'ai oublié de préciser des trucs, n'hésitez pas. Merci !
Partager