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 avec l'utilisation d'un tableau d'objets. [Débutant(e)]


Sujet :

Collection et Stream Java

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut Problème avec l'utilisation d'un tableau d'objets.
    Bonsoir,

    Voilà j'aimerais comprendre où est l'erreur dans ma tentative d'utilisation d'un tableau d'objets :
    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
     
     
    public class TestObject {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
     
            int nbrDeValeurs = 5 ;
     
            SommeEtCoordonnees [] SommeEtCoordonneesA ;
            SommeEtCoordonneesA  = new SommeEtCoordonnees[nbrDeValeurs]; 
     
            for (int i = 0 ; i < nbrDeValeurs ; i++)                       
                   SommeEtCoordonneesA[i].initialise(2, 3, 3, 5, 5);
     
           // SommeEtCoordonneesA[1].affiche(); 
     
        }
     
    }
     
     
    class SommeEtCoordonnees 
    {
        private int Somme ;                    // Somme et coordonnées des deux termes additionnés
        private int indiceColTerme1 ;      
        private int indiceColTerme2 ;
        private int indiceLigneTerme1 ; 
        private int indiceLigneTerme2 ;
     
     
        public void initialise (int Somme, int indiceLigneTerme1, int indiceColTerme1, int indiceLigneTerme2,  int indiceColTerm2)
          { 
     
            this.Somme = Somme ;
     
            this.indiceColTerme1 = indiceColTerme1 ;      
            this.indiceColTerme2 = indiceColTerm2 ;
            this.indiceLigneTerme1 = indiceLigneTerme1 ; 
            this.indiceLigneTerme2 = indiceLigneTerme2 ;
          }
     
        public void affiche ()
          { System.out.println ("L" + indiceLigneTerme1 + "C" + indiceColTerme1 + " + L" + indiceLigneTerme2 + "C" + indiceColTerme2 + " ---> Somme = " + Somme) ;
          }
     
    }
    Une erreur est signalée à la ligne 17 : SommeEtCoordonneesA[i].initialise(2, 3, 3, 5, 5);

    Exception in thread "main" java.lang.NullPointerException
    at TestObject.main(TestObject.java:16)
    Sinon à part ça faut-il obligatoirement remplir le tableau avant son utilisation ?

    Merci.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SommeEtCoordonneesA  = new SommeEtCoordonnees[nbrDeValeurs];
    tu crée un tableau de 5 entrées, mais il n'y a rien dedans. Que des null. Il faut donc y stocker des valeur avant d'essayer d'appeler des méthodes dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            for (int i = 0 ; i < nbrDeValeurs ; i++) {  
                   SommeEtCoordonneesA[i]=new SommeEtCoordonnees();
                   SommeEtCoordonneesA[i].initialise(2, 3, 3, 5, 5);
            }
    Enfin, ta méthode initialise ferait mieux d'être transformée en constructeur, puisque finalement c'est son but, ce qui donnerais ceci
    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
    public class TestObject {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
     
            int nbrDeValeurs = 5 ;
     
            SommeEtCoordonnees [] SommeEtCoordonneesA ;
            SommeEtCoordonneesA  = new SommeEtCoordonnees[nbrDeValeurs]; 
     
            for (int i = 0 ; i < nbrDeValeurs ; i++)                       
                   SommeEtCoordonneesA[i] = new SommeEtCoordonnees(2, 3, 3, 5, 5);
     
           // SommeEtCoordonneesA[1].affiche(); 
     
        }
     
    }
     
     
    class SommeEtCoordonnees 
    {
        private int Somme ;                    // Somme et coordonnées des deux termes additionnés
        private int indiceColTerme1 ;      
        private int indiceColTerme2 ;
        private int indiceLigneTerme1 ; 
        private int indiceLigneTerme2 ;
     
     
        public SommeEtCoordonnees(int Somme, int indiceLigneTerme1, int indiceColTerme1, int indiceLigneTerme2,  int indiceColTerm2)
          { 
     
            this.Somme = Somme ;
     
            this.indiceColTerme1 = indiceColTerme1 ;      
            this.indiceColTerme2 = indiceColTerm2 ;
            this.indiceLigneTerme1 = indiceLigneTerme1 ; 
            this.indiceLigneTerme2 = indiceLigneTerme2 ;
          }
     
        public void affiche ()
          { System.out.println ("L" + indiceLigneTerme1 + "C" + indiceColTerme1 + " + L" + indiceLigneTerme2 + "C" + indiceColTerme2 + " ---> Somme = " + Somme) ;
          }
     
    }

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SommeEtCoordonneesA  = new SommeEtCoordonnees[nbrDeValeurs];
    tu crée un tableau de 5 entrées, mais il n'y a rien dedans. Que des null. Il faut donc y stocker des valeur avant d'essayer d'appeler des méthodes dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            for (int i = 0 ; i < nbrDeValeurs ; i++) {  
                   SommeEtCoordonneesA[i]=new SommeEtCoordonnees();
                   SommeEtCoordonneesA[i].initialise(2, 3, 3, 5, 5);
            }
    Enfin, ta méthode initialise ferait mieux d'être transformée en constructeur, puisque finalement c'est son but, ce qui donnerais ceci
    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
    public class TestObject {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
     
            int nbrDeValeurs = 5 ;
     
            SommeEtCoordonnees [] SommeEtCoordonneesA ;
            SommeEtCoordonneesA  = new SommeEtCoordonnees[nbrDeValeurs]; 
     
            for (int i = 0 ; i < nbrDeValeurs ; i++)                       
                   SommeEtCoordonneesA[i] = new SommeEtCoordonnees(2, 3, 3, 5, 5);
     
           // SommeEtCoordonneesA[1].affiche(); 
     
        }
     
    }
     
     
    class SommeEtCoordonnees 
    {
        private int Somme ;                    // Somme et coordonnées des deux termes additionnés
        private int indiceColTerme1 ;      
        private int indiceColTerme2 ;
        private int indiceLigneTerme1 ; 
        private int indiceLigneTerme2 ;
     
     
        public SommeEtCoordonnees(int Somme, int indiceLigneTerme1, int indiceColTerme1, int indiceLigneTerme2,  int indiceColTerm2)
          { 
     
            this.Somme = Somme ;
     
            this.indiceColTerme1 = indiceColTerme1 ;      
            this.indiceColTerme2 = indiceColTerm2 ;
            this.indiceLigneTerme1 = indiceLigneTerme1 ; 
            this.indiceLigneTerme2 = indiceLigneTerme2 ;
          }
     
        public void affiche ()
          { System.out.println ("L" + indiceLigneTerme1 + "C" + indiceColTerme1 + " + L" + indiceLigneTerme2 + "C" + indiceColTerme2 + " ---> Somme = " + Somme) ;
          }
     
    }
    +1 et problème résolu.

    Merci je comprends maintenant qu'il fallait allouer un emplacement pour chaque objet du tableau avec l'opérateur new.

    Sinon merci pour le conseil concernant le constructeur mais ici c'était volontaire car je voulais pouvoir affecter les champs de l'objet à tout moment.

    EDIT : Je viens de voir que la réponse est présente dans la FAQ ici : Comment instancier un tableau?

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

Discussions similaires

  1. Problème avec l'utilisation de LogMessage
    Par vanquish dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/11/2005, 10h18
  2. Problème avec l'utilisation d'un module
    Par goblin dans le forum Modules
    Réponses: 4
    Dernier message: 09/11/2005, 20h55
  3. Problème avec l'utilisation de librairies
    Par Aradesh dans le forum MFC
    Réponses: 3
    Dernier message: 01/08/2005, 15h00
  4. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  5. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27

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