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 :

ArrayList avec tableau d'entier à 2 dimensions


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut ArrayList avec tableau d'entier à 2 dimensions
    Bonjour,

    Ma question n'a qu'un but pédagogique.

    Est ce que quelqu'un pourrait m'aider à trouver une solution à mon problème en m'expliquant ce que je peux faire ?
    J'essaye de lire un tableau à 2 dimensions se trouvant dans une liste à l'aide d'une boucle for, et lorsque je lis celui-ci après quelques insert, ma boucle for m'affiche toujours le dernier enregistrement.

    J'ai du louper un notion essentiel mais un peu d'aide serait la bienvenue, je tourne en rond

    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
     
     
    public static void main(String[] args) {
     
    		 // Déclaration de ma liste
    		ArrayList <int[][]> liste = new ArrayList <int[][]>();
     
    		// Déclaration de mon tableau
    		int[][] tableau = new int[1][2] ;
     
    		//Je souhaite insérer des valeurs dans chacune des colonnes de l'unique ligne du tableau pour ce faire :
     
    		//J'affecte des valeurs a chacune des colonnes
    		tableau[0][0] = 1 ;
    		tableau[0][1] = 11 ;
     
    		//J'ajoute le tableau avec les valeurs affectées à ma liste
    		liste.add(tableau);
     
    		System.out.println(liste.get(0)[0][0] + "\t" + liste.get(0)[0][1] ); // j'ai bien les valeurs dans la position 0 de ma liste
     
    		//J'affecte d'autres valeurs a chacune des colonnes
    		tableau[0][0] = 2 ;
    		tableau[0][1] = 22 ;
     
    		//J'ajoute le tableau avec les valeurs affectées à ma liste
    		liste.add(tableau);
     
    		System.out.println(liste.get(1)[0][0] + "\t" + liste.get(1)[0][1] ); // j'ai bien les valeurs dans la position 1 de ma liste
     
     
    		//Et lorsque je souhaite afficher le tout à l'aide d'une boucle j'obtiens le résultat du dernier ajout 2 fois
    		for (int i = 0 ; i < liste.size() ; i++ ) {
     
    			System.out.println(liste.get(i)[0][0] + "\t" + liste.get(i)[0][1] );
    		}
    Je vous remercie d'avance pour votre aide.

    Bien à vous.
    Venone.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand tu ajoutes une instance de tableau par liste.add(tableau);, tu ajoutes toujours la même instance. Il faut créer une nouvelle instance pour pouvoir avoir 2 tableaux différents dans la 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
    16
    17
    18
    19
    20
    			//Je souhaite insérer des valeurs dans chacune des colonnes de l'unique ligne du tableau pour ce faire :
    	 
    			//J'affecte des valeurs a chacune des colonnes
    			tableau[0][0] = 1 ;
    			tableau[0][1] = 11 ;
    	 
    			//J'ajoute le tableau avec les valeurs affectées à ma liste
    			liste.add(tableau);
    	 
    			System.out.println(liste.get(0)[0][0] + "\t" + liste.get(0)[0][1] ); // j'ai bien les valeurs dans la position 0 de ma liste
    	 
    			// j'affecte une nouvelle instance de tableau à la variable tableau 
    			tableau = new int[1][2] ;
    			
    			//J'affecte d'autres valeurs a chacune des colonnes
    			tableau[0][0] = 2 ;
    			tableau[0][1] = 22 ;
    	 
    			//J'ajoute le tableau avec les valeurs affectées à ma liste
    			liste.add(tableau);
    Dans le cas des classes ou des tableaux, les variables ne sont que des noms qui permettent de manipuler des instances, mais ce sont toujours les instances qui sont manipulées.

    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
    int[] tab1 = new int[3]; // instance A
    int[] tab2 = new int[3]; // instance B
    int[] tab3 = tab2; // instance B
    List<int[]> list = new ArrayList<>();
    list.add(tab1); // 0
    list.add(tab1); // 1
    list.add(tab2); // 2
    list.add(tab3); // 3
    tab2 = new int[3]; // instance C
    list.add(tab2); // 4
    list.add(tab3); // 5
     
    // affiche la même cellule de l'instance de tableau A
    System.out.println(tab1[0]);
    System.out.println(list.get(0)[0]);
    System.out.println(list.get(1)[0]);
     
    // affiche la même cellule de l'instance de tableau B
    System.out.println(tab3[0]); 
    //System.out.println(tab2[0]); // là non, c'est l'instance C, on a modifié la valeur de la variable tab2
    System.out.println(list.get(2)[0]);
    System.out.println(list.get(3)[0]);
    // System.out.println(list.get(4)[0]); // là non, c'est l'instance C, même si on a utilisé la variable tab2 avec le add()
    System.out.println(list.get(5)[0]);

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Joel.drigo pour votre aide.

    Venone.

Discussions similaires

  1. [PDO] Requête préparée avec tableau d'entiers
    Par Invité dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/08/2018, 20h01
  2. Retourner un tableau d'entier avec une fonction ?
    Par Seb33300 dans le forum C++
    Réponses: 10
    Dernier message: 05/04/2007, 17h25
  3. [Débutant] Problème avec tableau à deux dimensions
    Par beegees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/12/2006, 15h06
  4. Tableau d'entiers avec images en fond
    Par loic72 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 24/09/2006, 20h29
  5. dimension d'un tableau d'entier statique
    Par rare1 dans le forum C
    Réponses: 6
    Dernier message: 30/08/2006, 18h55

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