IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Modification des éléments d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut Modification des éléments d'un tableau
    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 :
    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;
            }
        }
    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
     
    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;
            }
    }
    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
     
    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;
    }
    Cette dernière fonction writeOneBlock modifie l'état de tous les indices du tableau à "IN_WRITING". Pourquoi ???

    Si j'ai oublié de préciser des trucs, n'hésitez pas. Merci !

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    Dans la classe Memory la méthode initializeMemory, l'instanciation de tous les éléments du tableau se fait avec la même instance de Block.
    En gros, il y a le même Block dans chaque 'case' du tableau.
    Si l'on modifie le bloc, et vu que l'on a le même partout, ils sont 'tous' modifié.

    Pour ne pas avoir trop de modifs de code, il faudrait avoir quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     private void initializeMemory()
        {
            for(int i=0;i<blocks.length;i++)
            {
                blocks[i] = new Block();
            }
        }

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Merci !!

    C'est bête, mais j'y aurais jamais pensé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des élément a un tableau
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2007, 14h23
  2. Réponses: 7
    Dernier message: 21/08/2006, 13h58
  3. [Struts] ordre des éléments dans un tableau de propriétés
    Par zais_ethael dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/05/2006, 15h54
  4. Réponses: 4
    Dernier message: 17/04/2006, 20h10
  5. [dom je pense]accéder à des éléments d un tableau sans id
    Par luta dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/02/2006, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo