Stocker des entier à partir d'un fichier dans une ArrayList

Résolu
bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009 - 9 juil. 2009 à 10:14
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009 - 11 juil. 2009 à 18:08
Bonjour tout le monde,
Je suis débutante en Java.Le travail que j'effectue consiste à extraire les chiffres à partir d'un fichier texte.Le fichier est sous cette forme :
0 1 1 1 0 0 0
1 0 1 0 1 0 1
....

Je stocke chaque ligne du fichier dans une ArrayListe:

for(int i=0;i<=nb_ligne;i++){
ArrayList var = new ArrayList();
ligne = br.readLine(); ligne=ligne.trim();
StringTokenizer val = new StringTokenizer(ligne," "); while(val.hasMoreTokens())
{ var.add(Integer.parseInt(val.nextToken())); System.out.println(var);
}

Ce code me ramène l'exception suivante:
java.lang.NullPointerException
Est ce que quelqu'un peut m'aider?Je veux savoir si je suis sur la bonne voie.

14 réponses

bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 12:03
Je fais comment??Je doit déclarer une ArrayList de boolean ou quoi??
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 14:10
Ben un boolean, c'est 1 octet, 1 int c'est 4 octets en java... donc le choix est vite fait !

Je parle bien sûr des types primitifs et non des classes Boolean et Integer !
3
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 10:27
Hello ! l'erreur NullPointerException, en JAVA, c'est pratiquement à tout les coups une mauvaise initialisation d'une variable.

Normalement, java te dis à quelle ligne ça a "planté"

J'ai une petite idée d'ou ça vient :
for(int i=0;i<=nb_ligne;i++)

Tu as des résultats avant ton exception ?
Comment te procures-tu nb_ligne ?
Qu'est-ce que br ? Un BufferedReader ?

Sinon,si tu vas de 0 à nb_ligne inclus (<=), tu aura fais nb_ligne+1 itérations !
utilise for(int i=0;i<nb_ligne;i++) ou  for(int i=1;i<=nb_ligne;i++)

Ce que tu peux faire autrement :
BufferedReader br = (je sais aps comment tu l'as initialisé)
String ligne = null;

while ((ligne=br.readLine())!=null){
ArrayList var = new ArrayLis()
ligne=ligne.trim();
StringTokenizer val = new StringTokenizer(ligne,"
");
 while(val.hasMoreTokens()) {
var.add(Integer.parseInt(val.nextToken())); System.out.println(var);
}

; I'm just keeping the hopeless cross to increase the meaninglessness
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 10:54
Salut,

Un seul réflexe : mets un point d'arrêt dans ton code (à partir de ton ide favori, et lorsque ton code en arrive à la ligne qui plante, essaye de voir pourquoi la variable est nulle...

Sinon, un truc qui risque te poser soucis :
while ((ligne=br.readLine())!=null){
ArrayList var = new ArrayList();

Ne pas initialiser ta variable var à chaque tour de boucle, sinon tu n'auras que la dernière ligne dans ta liste !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 10:54
oui c'est vrai c'est une faute d'initailisation.Merci pour ton aide.Je veux juste savoir comment je pourrais manipuler le contenu du ArrayListe.Je m'explique encore plus:
Le fichier contient 1 0 1 0 0 0 1
0 1 1 1 0 0 0
....
Je veux extraire tout les 1 dans une structure sachant que le fichier contient nb_colonnes et nb_lignes.
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 11:07
Si tu connais la dimension de ton fichier (lignes, colonnes), pourquoi ne fais-tu simplement pas un tableau à 2D ?

int fichierDump[][] = new int[nb_lignes][nb_col];

I'm just keeping the hopeless cross to increase the meaninglessness
0
bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 11:20
En fait je n'utilisa pas un tableau parce que la taille des fichier que je traite est assez grande et on m'a conseillé d'utiliser la structure ArrayList parce que les tableau demande de l'espace mémoire contigu et ça peut poser des problème de mémoire si la taille dépasse une certaine limite.Avec l'ArrayList on peut éviter ce genre de problème.
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 11:39
Question à part, mais ça correspond à quoi tes 0 et tes 1 ?
(je m'attendais pas a en avoir autant ^^)

;I'm just keeping the hopeless cross to increase the meaninglessness
0
bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 11:54
:)))En fait il s'agit de bases binaires.En fait ça concerne le domaine de fouille de données.Les 1 ça représentent les attributs pertinents que je vais garder dans une structure qui contient sa position(indice ligne,indice colonne)pour faire des traitements plus tard. J'espère que je me suis fait comprendre.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 11:58
Pourquoi tu ne les stocke pas dans un boolean plutôt qu'un entier ? Ca te permettrait de gagner beaucoup de mémoire déjà !
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 13:48
"Pourquoi tu ne les stocke pas dans un boolean plutôt qu'un entier ? Ca te permettrait de gagner beaucoup de mémoire déjà !"

T'en es sur ?
Javac est intelligent au point de rassembler 8 bits pour les stocker dans un byte en mémoire ?

;I'm just keeping the hopeless cross to increase the meaninglessness
0
bachtoutou Messages postés 6 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 16:03
Comment déclarer un enregistrement en java?je veux stocker les les indices relatifs aux "1" dans une structure.Le code suivant me ramène une exception:

while(val.hasMoreTokens()){ var.add(Integer.parseInt(val.nextToken())); System.out.println(var.get(j));
j++;
if(var.get(j)==1){ ArrayList t= new ArrayList(); System.out.println("££££"+t.size());
t.add(j); System.out.println(t.get(j));
}

L'exception qui apparait est la suivante:java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 16:44
Attention, les index commence à 0 et non à 1 !
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
11 juil. 2009 à 18:08
Justement, je crois (pas sur), qu'utiliser un boolean , int, ou autre dans une classe générique (ArrayList, HMap,..), ça te l'encapsule dans un objet..et donc, ça pusherait le pointeur (donc un int) :D

;I'm just keeping the hopeless cross to increase the meaninglessness
0
Rejoignez-nous