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 :

Pb ArrayList - get()


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Par défaut Pb ArrayList - get()
    Bonjour,

    Après moultes essais, je dois mal utiliser la méthode get() des ArrayList.

    Ma classe Main affiche 3 fois le même objet de l'Array (le dernier) au lieu d'afficher les trois éléments...(j'ai vérifié, ils sont saisis correctement dans l'Array).

    Si vous voyez une cacahouète dans mon code...ça doit sûrement venir de là...

    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
    42
    43
    44
    45
    46
     
    package Gestion_SCE;
    import java.util.*;
     
    public class Main {
     
        private static Locale locale = null;
     
        public static void main(String[] args) {
            int i=0;
     
            // Gestion de l'internationalisation
            if (args.length != 2)
                locale = new Locale("fr","FR");
            else 
                locale = new Locale(args[0], args[1]);
     
            Hosts_Nagios Hosts = new Hosts_Nagios(locale);
            Hosts.LectureFichier();
            Services_Nagios Serv = new Services_Nagios(locale);
            Serv.LectureFichier();
     
            // Test de construction de l'array final et affichage du dernier 
            Array_Complet Res = new Array_Complet();
            Res.Construction(Hosts, Serv);
            System.out.println();
            System.out.println("Liste des paramètres définitifs");
            System.out.println("Taille du tableau final : " + Res.finale.size());
            for(i=0;i<Res.finale.size();i++){
                Complet tmp_obj = new Complet();
                tmp_obj = (Complet) Res.finale.get(i);
     
                System.out.print("Hote : " + tmp_obj.getNom() + ",");
                System.out.print("Ip : " + tmp_obj.getIp() + ",");
                System.out.print("Service : " + tmp_obj.getService() + ",");
                System.out.println("Ligne de commande : " + tmp_obj.getCommande() + ",");
                System.out.print("Chemin d'accès : " + tmp_obj.getPath() + ",");
                System.out.print("TempsDepartDown : " + tmp_obj.getTempsDepartDown() + ",");
                System.out.print("TempsCheck : " + tmp_obj.getTempsCheck() + ",");
                System.out.println("TempsDepartScript : " + tmp_obj.getTempsDepartScript() + ",");
                System.out.print("EtatInit : " + tmp_obj.getEtatInit() + ",");
                System.out.println("EtatLocal : " + tmp_obj.getEtatLocal());
                System.out.println();
            }
        }
    }
    et la classe array_complet :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    package Gestion_SCE;
    import java.io.*;
    import java.util.*;
    import java.util.regex.Pattern;
     
    public class Array_Complet {
     
        public ArrayList finale;
        public Array_Complet(){
            finale = new ArrayList();
        }
     
        public ArrayList Construction (Hosts_Nagios Hosts, Services_Nagios Serv){
     
            // Variables
            NomIp Obj_Hote_Temporaire = new NomIp("", "");
            NomService Obj_Service_Temporaire = new NomService("", "", "", "");
            Complet Obj_Complet = new Complet();
            int i=0, j=0, compteur=0;
     
            for (i=0 ; i < Hosts.Array_NomIp.size() ; i ++){
                Obj_Hote_Temporaire = (NomIp)Hosts.Array_NomIp.get(i);
     
                for (j=0 ; j < Serv.Array_NomService.size() ; j ++){
                    Obj_Service_Temporaire = (NomService)Serv.Array_NomService.get(j);
     
                    if (Obj_Hote_Temporaire.getNom().equals (Obj_Service_Temporaire.getNom())){
                        Obj_Complet.setNom(Obj_Hote_Temporaire.getNom());
                        Obj_Complet.setIp(Obj_Hote_Temporaire.getIp());
                        Obj_Complet.setService(Obj_Service_Temporaire.getService());
                        Obj_Complet.setCommande(Obj_Service_Temporaire.getCommande());
                        Obj_Complet.setPath("/LesHotes/Scripts/" + Obj_Hote_Temporaire.getNom() + "/");
                        Obj_Complet.setTempsCheck(Obj_Service_Temporaire.getTemps());
                        Obj_Complet.setTempsDepartScript(""); // à valider avec l'interface
     
                        System.out.println("Valeur d'Obj_Complet avant ajout dans l'array finale :");
                        System.out.print(Obj_Complet.getNom() + " - ");
                        System.out.print(Obj_Complet.getIp() + " - ");
                        System.out.print(Obj_Complet.getPath() + " - ");
                        System.out.print(Obj_Complet.getService() + " - ");
                        System.out.print(Obj_Complet.getCommande() + " - ");
                        System.out.println(Obj_Complet.getTempsCheck());
     
                        /** Ajout de l'élément complet dans le nouveau tableau */
                        finale.add(Obj_Complet);
                        compteur ++;
     
                        // verif de ce qui a été ajouté
                        Complet tempo = new Complet();
                        tempo = (Complet)finale.get(compteur-1);
                        System.out.println("Valeur de l'objet ajouté précédemment :");
                        System.out.print(tempo.getNom() + " - ");
                        System.out.print(tempo.getIp() + " - ");
                        System.out.print(tempo.getPath() + " - ");
                        System.out.print(tempo.getService() + " - ");
                        System.out.print(tempo.getCommande() + " - ");
                        System.out.println(tempo.getTempsCheck());
                        System.out.println();
     
                    }
                }
            }
            return finale;
        }
    }

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Déjà on parcours une List avec un Iterator, ensuite ton code est (SUPER) "crade" :
    - pense aux conventions de nommage (classes, attributs, paramètres...)
    - à l'accessibilité des attributs d'une instance (quasiment toujours private...)
    - à l'héritage (même d'une Collection si seulement des ajouts sans redéfinition...)
    - aux constructeurs (et pas aux méthodes de construction...)
    - ...

    Bref ; va voir les cours et tutoriels d'abord.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Par défaut
    Merci pour ces conseils mais ça me fait pas du tout avancer...et les tutoriaux j'en ai fait plein...ceux d'ici ou de bouquins.
    Je préfèrerai des idées de débuggages...

    Pour ce qui est du Iterator, je vois pas pourquoi j'irai m'embêter à utiliser ce truc alors que les programmeurs ont fait la méthode get() pour les ArrayLists...

  4. #4
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    http://java.sun.com/j2se/1.4.2/docs/...util/List.html
    Thus, iterating over the elements in a list is typically preferable to indexing through it if the caller does not know the implementation.
    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
     
    public class ClasseMain {    
        public static void main(String[] args) {
            ArrayComplet res = new ArrayComplet();
            res.construire(hosts, services);
            Iterator parcours = res.iterator();
            while (parcous.hasNext()) {
                Complet tmpObj = (Complet) parcours.next();
                //TODO
            }
        }
    }   
     
    public class ArrayComplet extends ArrayList {
        public void construire(HostsNagios hosts, ServicesNagios services) {
            //TODO
        }
    }

  5. #5
    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,


    Citation Envoyé par g_rare
    http://java.sun.com/j2se/1.4.2/docs/...util/List.html
    Thus, iterating over the elements in a list is typically preferable to indexing through it if the caller does not know the implementation.
    Plus exactement, on ne devrait pas utiliser les get() pour le parcours, sauf dans le cas où la List implémente RandomAccess, ce qui est le cas d'ArrayList et Vector...

    Mais cela peut s'avérer désastreux avec d'autres implémentation (LinkedList par exemple).



    Pour en revenir à ton problème : tu ajoutes a chaque fois le même objet dans la liste. C'est donc normal que tu ai à chaque fois les valeurs de la dernière itération, puisque c'est la dernière fois où tu as modifié l'objet...



    Sinon même remarques que g_rare : c'est illisible http://cyberzoide.developpez.com/java/javastyle/

    a++

  6. #6
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Par défaut
    Re,

    voilà le code une fois changé avec l'iterator :

    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
    42
     
    public class Main {
     
        private static Locale locale = null;
     
        public static void main(String[] args) {
     
            int i=0;
     
            // Gestion de l'internationalisation
            if (args.length != 2) {
                locale = new Locale("fr","FR");
            } else { 
                locale = new Locale(args[0], args[1]);
            }
     
            HostsNagios hosts = new HostsNagios(locale);
            hosts.lectureFichier();
     
            ServicesNagios serv = new ServicesNagios(locale);
            serv.lectureFichier();
     
            ArrayComplet res = new ArrayComplet();
            res.construire(hosts, serv);
            Iterator parcours = res.iterator();
            while (parcours.hasNext()) {
                Complet tmpObj = (Complet) parcours.next();
     
                System.out.println();
                System.out.print("Hote : " + tmpObj.getNom() + ",");
                System.out.print("Ip : " + tmpObj.getIp() + ",");
                System.out.print("Service : " + tmpObj.getService() + ",");
                System.out.println("Ligne de commande : " + tmpObj.getCommande() + ",");
                System.out.print("Chemin d'accès : " + tmpObj.getPath() + ",");
                System.out.print("TempsDepartDown : " + tmpObj.getTempsDepartDown() + ",");
                System.out.print("TempsCheck : " + tmpObj.getTempsCheck() + ",");
                System.out.println("TempsDepartScript : " + tmpObj.getTempsDepartScript() + ",");
                System.out.print("EtatInit : " + tmpObj.getEtatInit() + ",");
                System.out.println("EtatLocal : " + tmpObj.getEtatLocal());
                System.out.println();
            }
        }
    mais c'est toujours comme avec le get(), j'ai toujours droit à 3 fois le même objet à l'affichage.


    Pour en revenir à ton problème : tu ajoutes a chaque fois le même objet dans la liste. C'est donc normal que tu ai à chaque fois les valeurs de la dernière itération, puisque c'est la dernière fois où tu as modifié l'objet...
    J'ai pas compris ta remarque quant à l'ajout de l'élément dans l'array... vu que je change les paramètres, ce n'est pas le même que je rajoute...

    PS : j'espère que le code est un peu plus lisible...

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

Discussions similaires

  1. add et get de arrayList
    Par newuser dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/03/2007, 08h00
  2. gets() a la suite de scanf() -> probleme
    Par ickis dans le forum C
    Réponses: 12
    Dernier message: 14/12/2003, 20h24
  3. gets ,fgets
    Par Zazeglu dans le forum C
    Réponses: 2
    Dernier message: 19/09/2003, 18h24
  4. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03
  5. url d'une page asp ou upload avec get
    Par taupin dans le forum ASP
    Réponses: 18
    Dernier message: 22/08/2003, 14h25

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