Votre question

Classer des données dans une HashMap

Tags :
  • string
  • Programmation
Dernière réponse : dans Programmation
7 Mai 2008 15:19:38

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 :

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


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

Autres pages sur : classer donnees hashmap

7 Mai 2008 15:57:06

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.
7 Mai 2008 16:11:54

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 :
  1. static HashMap<String,ArrayList<String>> HMDonnees = new HashMap<String, ArrayList<String>>();


Reste à arriver à comparer tout ça !
Contenus similaires
Pas de réponse à votre question ? Demandez !
7 Mai 2008 17:41:09

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

Comme ça, si tu repasses dans recDonnées, tu vas repartir sur un hashmap vide.
8 Mai 2008 18:16:20

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: 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS