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 :

Problème ArrayList d'objets


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Par défaut Problème ArrayList d'objets
    Bonjour,

    je suis débutant en Java (et en programmation d'ailleurs).
    Je souhaite faire une arraylist d'objet. Ces objets sont chargés par un ficher csv.
    une ligne = un objet.

    Le problème est que l'implémentation de mes objets ne fonctionnent pas comme je voudrais...

    J'ai 3 lignes donc 3 objets.
    Je crée mes objets 1 à 1 et je verifie.
    Lorsque j'ai intégré mes objets, je veux lire mon arraylist et c'est là que je trouve un problème...

    exemple :
    Equipement equip = new Equipement("...") à chaque ligne..
    equip1 = @mem1
    equip2 = @mem2
    equip3 = @mem3

    Quand je lis mon arraylist je retrouve :
    @mem1 : contenu de equip3
    @mem2 : contenu de equip3
    @mem3 : contenu de equip3

    Je comprend donc que mes objets sont crées car ils ont des @ mémoires différentes mais ils ont tous le contenu du dernier objet intégré (içi equip3).
    J'ai beau cherché l'erreur.. je ne comprend pas...

    Voici la méthode que j'utilise pour créer mes objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ArrayList <Equipement> p = new ArrayList <Equipement>();
    
    public static void CreatObjet(ArrayList<Equipement> p, String ligne, int i) {
            String temp[];        
            temp = ligne.split("[|]");   //je split ma ligne dans les bonnes variables..
            ...
            Equipement equip = new Equipement(...); // je crée mon objet avec les bonnes variables.
            p.add( equip);      //j'ajoute l'objet (equip) à mon arraylist (p).
    }

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Il doit y avoir une erreur dans le code souligné en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ...
            Equipement equip = new Equipement(...);

    Mais difficile de t'aider pour l'instant !

    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Par défaut
    Désolé, je pensais que ce n'était pas utile.

    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
     
    ArrayList <Equipement> p = new ArrayList <Equipement>();
     
    public static void CreatObjet(ArrayList<Equipement> p, String ligne, int i) {
            String temp[];        
            temp = ligne.split("[|]");   //je split ma ligne dans les bonnes variables..
            nR = temp[0];
            nH = temp[1];
            nO = temp[2];
            nS = temp[3];
            nDte = temp[4];
            nB = temp[5] ;
            nId = i;
     
            Equipement equip = new Equipement(nR, nH,nO, nS, nDte, nB, nId);   //création de l'objet avec les bons arg.
            p.add( equip);      //j'ajoute l'objet (equip) à mon arraylist (p).
    }
    Merci bien.

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Il n'y a pas de soucis je pense dans le code donné... Donc le soucis doit se trouver dans le code qui l'appelle

    P.S. :
    - tes variables sont nommées trop courtes a mon avis -> aucun sens -> peu de lisibilité
    - tes variables servent à qqchose ? (je suppose que tu n'as pas mis tout le code). Parce que là pourquoi ne pas faire new Equipement(temp[0],temp[1),...) ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Es-tu sur d'appeler chaque fois avec une ligne différente? Comment fais-tu pour afficher tes donnée et conclure qu'il n'y a que la dernière ligne? On peux voir le code de Equipement aussi? Tu n'aurais pas défini ses champs en statiques par hasard?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chtig Voir le message
    - tes variables sont nommées trop courtes a mon avis -> aucun sens -> peu de lisibilité
    +1 !

    Citation Envoyé par chtig Voir le message
    - tes variables servent à qqchose ? (je suppose que tu n'as pas mis tout le code). Parce que là pourquoi ne pas faire new Equipement(temp[0],temp[1),...) ?
    Avec des noms de variables explicites cela aurait été utile, car cela apporte plus de lisibilité.
    Par exemple il est plus lisible de lire new User(firstName,lastName) que new User(temp[0],temp[1]).

    Maintenant ce qui me fait peur, c'est que toutes cas variables devrait être des variables locales or ce n'est pas le cas : où sont-elle définis ?

    Et en voyant qu'il y a une ArrayList<Equipement> p qui semble défini en attribut d'instance je crains qu'il n' s'agisse d'une mauvaise portée de variable...


    a++

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Par défaut
    Bonjour, tout d'abord je vous remercie pour vos réponses.

    j'ai en effet déclaré mes variable en static. (cela pose t'il problème?)

    Voici ma class Equipement :
    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
     
        private static String group;
        private static String host;
        (...)
    public Equipement (String nGroup, String nHost, String nOnline, String nStatus, String nDte, String nBackupmessage, int nId){
    		group = nGroup;
    		host = nHost;
    		online = nOnline;
    		status = nStatus;
    		dte = nDte;
    		backupmessage = nBackupmessage;
                    id = nId;
    	}
    public static void AfficheEquipement (ArrayList<Equipement> p, int i){
            System.out.println(p.get(i)+" : "+p.get(i).getGroup()+"    "+ p.get(i).getHost()+"    "+ p.get(i).getOnline()+"    "+ p.get(i).getStatus()+"    "+ p.get(i).getDte()+"    "+ p.get(i).getBck()+"    "+ p.get(i).getId());
        }
    (... accesseur et mutateur get/set ...)
    Ma class Outils :

    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
     
        private static String nGroup;
        private static String nHost;
        (...)
    public static void CreatObjet(ArrayList<Equipement> p, String ligne, int i) {
            String temp[];        
            temp = ligne.split("[|]");   //je split ma ligne dans les bonnes variables..
     
    //(ici j'ai 3 autres "if"pour les cas différents)
     
            if (temp.length == 6){
                nGroup = temp[0];
                nHost = temp[1];
                nOnline = temp[2];
                nStatus = temp[3];
                nDte = temp[4];
                nBackupmessage = temp[5] ;
                nId = i;
            }
     
            Equipement equip = new Equipement(nGroup, nHost,nOnline, nStatus, nDte, nBackupmessage, nId);
      //création de l'objet avec les bons arg.
            p.add( equip);      //j'ajoute l'objet (equip) à mon arraylist (p).
    }
    public static void AfficheParc (ArrayList<Equipement> p){
     
            for(int i = 0; i < p.size(); i++){
          Equipement.AfficheEquipement(p, i);      
        }
    Mon main :

    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
    37
    38
    39
    40
    41
     
    public static void main(String[] args) {
            // TODO code application logic here
     
            FileReader monFichier = null;
            BufferedReader tampon = null;
            String temp[];
            int nId = 0;
            ArrayList <Equipement> p = new ArrayList <Equipement>();
     
            try {
                monFichier = new FileReader("U:\\Document Projet\\ManipCSV\\testA.csv");
                tampon = new BufferedReader(monFichier);
     
                while (true) {
                    // Lit une ligne de test.csv
                    String ligne = tampon.readLine();
                    // Vérifie la fin de fichier
                    if (ligne == null) {
                        break;
                    }
     
                    System.out.println("ligne "+nId+" : "+ligne);                
                    Outils.CreatObjet(p,ligne,nId); 
     
                    nId++;
     
                } // Fin du while
                    Outils.AfficheParc(p);
            }
            catch (IOException exception) {
                exception.printStackTrace();
            } finally {
                try {
                    tampon.close();
                    monFichier.close();
                } catch (IOException exception1) {
                    exception1.printStackTrace();
                }
            }
        }
    Le Résultat :
    Les 3 lignes avec verification du contenu.
    @ mémoire de l'objet : contenu de l'objet
    -----------
    Lecture de mon Arraylist :
    @ mémoire de l'objet : contenu de l'objet


    ligne 0 : TUTU|BIBU005|online|succeeded|2012-12-16 05:00:22.524|
    rapportcsv.Equipement@5d173 : TUTU BIBU005 online succeeded 2012-12-16 05:00:22.524 null 0
    ------------------
    ligne 1 : TUTU|BIBU001|online|failed|2012-12-16 02:03:16.355|Device Backup communication failure.
    rapportcsv.Equipement@1f9dc36 : TUTU BIBU001 online failed 2012-12-16 02:03:16.355 Device Backup communication failure. 1
    ------------------
    ligne 2 : TOTO|TITO006|offline|||
    rapportcsv.Equipement@e86da0 : TOTO TITO006 offline null null null 2
    ------------------
    rapportcsv.Equipement@5d173 : TOTO TITO006 offline null null null 2
    rapportcsv.Equipement@1f9dc36 : TOTO TITO006 offline null null null 2
    rapportcsv.Equipement@e86da0 : TOTO TITO006 offline null null null 2

    Comme je l'ai dit donc.. J'ai l'impression que mes objets sont bien intégrés à mon Arraylist "p" mais le contenu n'est pas bon...

    Merci de votre aide.

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

Discussions similaires

  1. Petit problème ArrayList objet
    Par astran dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/04/2013, 10h27
  2. Problème de ListView avec une ArrayList d'objets
    Par zouky dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 24/08/2012, 00h40
  3. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44
  4. [C#] Copier un ArrayList d'objets
    Par ahedev dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/11/2004, 12h14

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