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 :

Valeurs liées dans un ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut Valeurs liées dans un ArrayList
    Bonjour,

    j'essaye de faire une ArrayList dans laquelle je veut rajouter une valeur à un endroit précis, en mettant comme nouvelle valeur la même que celle qui était à cet endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ArrayList<int[ ]> nouvelleListe = new ArrayList<int[ ]>( listeCor );
    int[ ] ancien = listeCor.get( pos - 1 );
    // Ajout d'une équivalence
    nouvelleListe.add( pos - 1, ancien );
     
    // Incrémentation à la position pos
    ancien[ SANS ] ++;
    ancien[ AVEC ] ++;
    nouvelleListe.set( pos, ancien );
    listeCor étant une ArrayList<int[]> remplie.

    Mon soucis est qu'en faisant le code ci-dessus, quand je modifie ancien[], je modifie non seulement le int[] à la position "pos" mais aussi celui à la position "pos-1" !
    Les 2 sont liés ! Qu'ai-je fais d'incorrect ?

    Merci beaucoup,
    Bastien.

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    Je pense que ton problème peut être résolu si tu utilises ancien.clone() quand tu l'ajoutes dans ta liste.

    Une remarque, n'y a t il pas une des 2 lignes en trop ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList<int[ ]> nouvelleListe = new ArrayList<int[ ]>( listeCor );
    int[ ] ancien = listeCor.get( pos - 1 );
    nouvelleListe.add( pos - 1, ancien );
    Construire une Arraylist à partir d'une autre collection va la remplir de valeurs (dans l'ordre renvoyé par l'itérateur)
    Et après, tu ajoutes des valeurs de la collection qui a servi lors de la construction dans l'arraylist...

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Lorsque tu écris "nouvelleListe.add( pos - 1, ancien );", tu ajoutes à ta nouvelle liste une référence vers l'objet ancien.

    Modifier cet objet après ou avant l'avoir mis dans ta liste ne change rien : la liste pointe toujours vers le même objet.

    Pour résoudre ce problème, il faut que tu modifies une copie de ton tableau.

    Note : tu pourras vérifier que le tableau a été modifié à la position pos - 1, à la position pos, mais également dans ta liste listeCor (car elle référence également le même objet).
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Merci de votre rapidité pour m'avoir répondu !

    Je teste ça et je vous tiens au courant !

    ps: zorm, je souhaite effectivement rajouter une valeur dans la nouvelle liste.

    [HORS SUJET: ON]
    En fait, il s'agit d'une liste de correspondance entre un fichier TXT et un fichier HTML.
    Exemple:
    le txt : Bonjour
    le html : <html><body>Bonjour</body></html>

    Ma liste sert à dire que la position 0 du txt ( B ), se retrouve en position 12 du HTML.
    Et c'est bien beau tout çà, mais si l'utilisateur rajoute un caractère dans le TXT (par exemple: Bonjouur), il faut que je mette à jour cette liste. D'où le fait de faire une nouvelle liste à laquelle je rajoute un nouvel élément identique au précédent (afin de décaler tous les autres).
    [HORS SUJET: OFF]


    EDIT: j'ai essayé de faire "int[ ] ex = ancien.clone();" et "int[ ] ex = ancien;". Dans les 2 cas, si je modifie ex, ça changera encore les 2 valeurs.
    Pourtant, j'ai bien fait une copie de mon tableau là non ?


    RE-EDIT: J'ai réussi en faisant comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[ ] ex = {listeCor.get( pos - 1 )[ SANS ], listeCor.get( pos - 1 )[ AVEC ]};
    Merci beaucoup pour votre aide !
    Mais j'ai quand même pas compris le coup du 1er EDIT

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

Discussions similaires

  1. Intégrer une valeur d'une table liée dans un champ
    Par sardaucar dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/05/2014, 13h30
  2. [MySQL] Affichage de la valeur stockée dans une table liée
    Par Actraiser dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/05/2011, 09h07
  3. Réponses: 7
    Dernier message: 23/07/2010, 15h03
  4. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 16h28
  5. valeurs de plusieurs textfield dans un arrayList
    Par oussama127 dans le forum Struts 1
    Réponses: 1
    Dernier message: 01/03/2007, 17h18

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