2010-11-01 4 views
1

J'ai rencontré le problème suivant: J'ai une classe java avec un membre privé comme ceci:Java - NullPointerException en Array

private Arcs[] arcs; 

Ce n'est pas initialisés dans le constructeur parce que je ne connais pas la longueur mon vecteur encore, mais il est initialisé dans la fonction de lecture, où je lis les informations d'un fichier. Dans cette fonction, je fais ce qui suit:

arcs = new Arcs[n]; //n is a number read from file 

Ensuite, il y a un cycle while dans lequel je lis d'autres choses à partir du fichier et j'ai quelque chose comme:

while(condition){ 
... 
arcs[i].add(blah); //i is a valid number, smaller than n, and the add function is also correct 
... 
} 

Mais ici, j'ai une erreur disant NullPointerException et je ne comprends pas pourquoi. J'apprécierais que quelqu'un m'explique ce qui se passe.

Répondre

9

En réalité, stockez-vous un objet Arcs dans arcs[i]? Si ce n'est pas le cas, tous les éléments de arcs[] seront initialisés à null. (D'où le NPE)

quelque chose comme ça:

while(condition){ 
    // ... 
    arcs[i] = new Arcs(); 
    arcs[i].add(blah); 
    // ... 
} 

Référence:

+0

Je ne peux pas faire cela, parce que je peux reffer aux mêmes arcs [i] dans plus d'une boucle et cela signifierait l'initialiser encore et encore et à la fin, je ne vais pas avoir tous les informations dont j'ai besoin. J'ai aussi essayé de le faire juste avant le moment mais toujours pas bon. – Sireny

+0

@Sireny, vous pouvez faire 'si (arcs [i] == null) {arcs [i] = nouveaux Arcs(); } '. Il y a peut-être une façon plus simple de gérer cela. –

+0

Ok, j'ai encore essayé, et maintenant ça marche ... J'ai utilisé un cycle pour initialiser tous les éléments et maintenant c'est bon. Je ne comprends pas pourquoi cela n'a pas fonctionné en premier lieu. De toute façon, merci pour l'aide de tout le monde :) – Sireny