Tom's Guide > Forum > Programmation > Classer des données dans une HashMap

Classer des données dans une HashMap

Forum Programmation : Classer des données dans une HashMap

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous !

Je suis chargée de créer un programme java qui lit et compare les plannings de cours d'étudiants (2 à 2) puis qui affiche un planning avec les horaires disponibles (dans le but de faire un tournoi de tennis...)

Le début de mon code est le suivant :

Code :
  1. import java.io.*;
  2. import java.util.*;
  3. public class AlgoTP5{
  4.     /** Déclaration d'une hashMap destinée à stocker les données.
  5.      *  La clé est formée du nom et de la date de naissance d'un étudiant.
  6.      *  La valeur de chaque clé est une ArrayList avec les horaires.
  7.      */
  8.     static HashMap<String,ArrayList<String>> HMDonnees;
  9.     /**
  10.      * Méthode permettant de lire un fichier, de séparer les données
  11.      * qu'il contient puis de les ranger dans la map.
  12.      * 
  13.      * @param fil Le fichier à lire
  14.      * @throws IOException
  15.      */
  16.     public static void recDonnees(String fil) throws IOException{
  17.         try{
  18.             /** Lecture du fichier */
  19.             File fichier = new File(fil);
  20.             FileReader lecteurDeFichier = new FileReader(fichier);
  21.             BufferedReader buff = new BufferedReader(lecteurDeFichier);
  22.             /** Tant qu'il y a quelque chose à lire */
  23.             while (buff.ready()){
  24.                 String ligne = buff.readLine();
  25.                 StringTokenizer coupeur = new StringTokenizer(ligne, ";:" );
  26.                 String s1 = new String(coupeur.nextToken());
  27.                 ArrayList<String> s2 = new ArrayList<String>();
  28.                 while (coupeur.countTokens() != 0){
  29.                     s2.add(new String(coupeur.nextToken()));
  30.                 }
  31.                 HMDonnees.put(s1, s2);
  32.             }//Fin while
  33.         }//Fin try
  34.         catch(IOException err){
  35.             System.out.println("Erreur : "+err);
  36.         }//Fin catch
  37.     }//Fin recDonnees
  38.     public static void main(String[] args)throws IOException{
  39.         /** Demande d'entrée du nom de fichier à l'utilisateur */
  40.         Scanner clavier = new Scanner(System.in);
  41.         System.out.println("Veuillez saisir le nom du fichier contenant les plannings des cours (sans oublier l'extension .txt !) : " );
  42.         String fil = clavier.next();
  43.         recDonnees(fil);
  44.     }
  45. }



Le problème est que j'obtiens le message d'erreur suivant à la compilation :

Citation :

Exception in thread "main" java.lang.NullPointerException
at AlgoTP5.recDonnees(AlgoTP5.java:46)
at AlgoTP5.main(AlgoTP5.java:65)



Je ne comprends pas trop d'où vient le problème alors si vous avez une idée, elle est la bienvenue :)

P.S. : Le fichier ressemble à ça :
TAILAMI/12031985:1/8;1/9;1/16;2/8;2/11;3/11;2/13;3/14;4/9;4/10;4/13;5/8;4/11;2/15;3/15;1/16;4/16;1/17;2/17;4/17
FATHI/1407/1989:5/17;4/17;1/17;2/16;3/16;4/16;3/15;1/14;5/14;1/13;4/13;3/12;4/12;2/11;5/11;2/10;5/10;4/9;4/8;5/8
Lee/15121981:1/14;1/11;1/15;1/10;2/11;3/13;3/14;3/12;3/15;3/8;4/14;4/16;4/17;4/15;4/12;5/11;5/10;5/9;5/8;5/15
RWASSIBO/10011987:1/17;3/16;2/8;2/17;3/9;2/16;1/14;1/15;4/15;2/9;3/15;1/16;2/13;2/14;3/8;4/10;4/11;
LAUNAY/05051990:4/12;4/13;5/12;5/11;5/16;5/10;3/9;3/10;3/12;3/13;3/14;1/8;1/9;1/10;1/11;5/8;4/11;5/10;5/17;5/16;5/9;5/8;5/10;5/16;5/17

Avec comme structure :
NOM/date de naissance : jour/heure du cours (1 = lundi, 2 = mardi...)

Merci d'avance

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Re,

Alors, il faudrait apprendre a interpréter les messages d'erreur....

Exception in thread "main" java.lang.NullPointerException
AlgoTP5.recDonnees(AlgoTP5.java:46)

=> ça veut dire que tu as un pointeur null à la ligne 46, dans la classe AlgoTP5, dans la méthode recDonnees.

et à cette ligne là, tu as :
HMDonnees.put(s1, s2);

HMDonnees est null, ce qui n'est pas étonnant vu que tu ne l'initialise nulle part.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

Merci beaucoup !
Désolé, j'ai posté un peu hâtivement...
Sans rentrer dans les détails, il y a eu pas mal de problèmes pour ce cours (pas de prof pendant + de la moitié du semestre) et j'ai réussi à me débrouiller jusqu'à présent mais là avec les exas dans 2 semaines c'est quasi impossible de faire à la fois les TPs et les révisions :S

Je te remercie une fois encore, tu es super rapide en plus ^^

Ce qui nous donne donc, à la ligne 10 :

Code :
  1. static HashMap<String,ArrayList<String>> HMDonnees = new HashMap<String, ArrayList<String>>();



Reste à arriver à comparer tout ça !

Répondre à Youp74

nan, fait ça dans ta méthode recDonnée.

Comme ça, si tu repasses dans recDonnées, tu vas repartir sur un hashmap vide.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

Merci, ça fonctionne !

Par contre, quelqu'un aurait une idée pour arriver à comparer les différentes ArrayList contenues dans la hashMap ?

Ce sont les horaires de cours qui sont contenus là dedans, et il faut arriver à trouver les horaires libres, ce qui me pose actuellement problème :sweat:

Répondre à Youp74
Tom's Guide > Forum > Programmation > Classer des données dans une HashMap
Aller à :

Il y a 2672 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens