Java : NullPointerException

Résolu/Fermé
Berri-UQAM - 11 févr. 2011 à 20:53
 Berri-UQAM - 11 févr. 2011 à 21:15
Bonjour,

je suis en train de créer un programme en java, mais je rencontre un problème.

J'ai créé une classe Voyage avec un tableau de Personne dedans. J'ai défini 2 constructeurs et un getter qui renvoie une ligne particulière du tableau.

public class Voyage {

   public Voyage() {
      voyageur = new Personne[1];
   }

   public Voyage(int nombre) {
      voyageur = new Personne[nombre];
   }

   private Personne voyageur[];

   public Personne getVoyageur(int ligneTableau) {
      return voyageur[ligneTableau];
   }
   
}


La classe Personne contient un String (nom) et un getter :

public class Personne {
   
   public Personne {
      nom = "Test";
   }

   private String nom;

   public String getNom() {
      return nom;
   }
}


Et voici mon code principal :

public static void main(String[] args) {
   int nombre = 2; // à la base, je le récupère au clavier, mais c'est pour simplifier les choses
   Voyage trajet = new Voyage(nombre);

   // Maintenant, je veux afficher le nom du 1er voyageur (= "Test")
   System.out.println("Nom du voyageur 1 : " + trajet.getVoyageur(0).getNom());
}


Et là, c'est le drame :

Exception in thread "main" java.lang.NullPointerException
        at reservation.Controleur.main(Controleur.java:ligne_du_main_où_se_trouve_le_System.out.println)
Java Result: 1



Je ne vois pas ce qui cloche ? Quelqu'un a-t-il une idée SVP ?
A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
11 févr. 2011 à 21:01
Oui et une belle d'idée !! :-)

 int nombre = 2; // à la base, je le récupère au clavier, mais c'est pour simplifier les choses
Voyage trajet = new Voyage(nombre);


Là tout va bien, tu définis un objet Voyage nommé trajet, qui comportera 2 voyageurs si je ne m'abuse.

Enfin tout va bien, pour le moment :-)

Si on regarde ce que fait ta classe voyage, notamment ton constructeur

public Voyage(int nombre)


Il ne fait que dire que le tableau

  private Personne voyageur[];


Ne sera composé que de 2 éléments.

SAUF que par la suite, tu n'a ajouté aucun élément à ton tableau. Il est juste déclaré avec comme taille 2, et c'est tout.

Comme tu n'as pas ajouté d'objet de type Personne dans ton tableau, les objets composant le tableau sont donc tous NULL.

Donc, il est normal que quand tu tentes de récupérer l'objet personne avec l'ID passé en paramètre, tu ne récupères que NULL, et donc une exception Java.

C'est compréhensible?
1
Suis-je bête ! J'ai complètement oublié ce détail, alors qu'il est évident !

J'ai donc modifié mes constructeurs :

public Voyage() {
   voyageur = new Personne[1];

   voyageur[0] = new Personne_en_ligne();
}


et

public Voyage(int nombre) {
   voyageur = new Personne[nombre];

   for (int i = 0 ; i < nombre ; i++) {
      voyageur[i] = new Personne_en_ligne();
   }
}


Ce doit être le début des vacances qui me fait ça ^^

Merci beaucoup pour ton aide (et ta sympathie ;)) !
0