Probleme d'ajout dans une hashmap

Fermé
Nolan - Modifié le 6 juin 2018 à 19:53
 Nolan - 6 juin 2018 à 21:32
Bonjour,

Je dois faire un projet sur une frise chronologique et je dois rajouter des événements sachant qu'ils peut y avoir des événements la même année j'ai fait mon code mais cela ne marche pas au lieu de rajouter l’événement a la suite d'un autre événement de la même année il ne fais rien.J'aurais besoin d'une réponse rapidement s'il vous plait il me le faut pour demain merci.

Voici mon code:

package modele;

import java.io.Serializable;
import java.util.HashMap;
import java.util.TreeSet;

import vue.*;

public class Frise implements Serializable{
 
 private static HashMap<Integer, TreeSet<Evenement>> chHashMap = new HashMap<Integer,TreeSet<Evenement>>();
 
 int dateDebut;
 int dateFin;
 int periode;
 String nom;

 public Frise(String N,int dDeb,int dFin,int per){
  nom=N;
  dateDebut=dDeb;
  dateFin=dFin;
  periode=per;
  ;
 }
 
 public static void ajout(Date parDate,Evenement parEvt) {
  TreeSet<Evenement> arbre;
  Integer m = new Integer(parDate.getAnnee());
  
  if (chHashMap.containsKey(m)==false){
   
   System.out.println("pas de clé");
   arbre = new TreeSet<Evenement>();
   arbre.add(parEvt);
   chHashMap.put(m,arbre);
  }
  
  else {
   System.out.println("il y a une clé");
   arbre=chHashMap.get(m);
   System.out.println(parEvt);
   arbre.add(parEvt);
     }
  for (Integer a : chHashMap.keySet()){
   System.out.println(a+ " : "+chHashMap.get(a));
  }
 }

 public TreeSet<Evenement> getEvts(Date parDate){
  return chHashMap.get(parDate);
 }
}

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 juin 2018 à 20:03
Bonjour,

La méthode ajout est correct (même si elle peut être simplifiée).

Par contre getEvts est invalide. chHashMap a des clés de type Integer et tu fais un get avec un objet Date...
0
Merci mais cela ne résout pas mon problème d'événement qui ne veut pas se rajouter a la même date qu'un autre événement.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > Nolan
6 juin 2018 à 20:26
J'ai fait le test et ton code d'ajout fonctionne.
Le problème est ailleurs, probablement dans le reste de ton code.
0
A tu essayer de mettre 2 événement à la même date et si oui:

Voici le code ou l'ajout est fait:

package vue;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import modele.*;

import java.io.File;
import java.util.TreeMap;
import java.util.TreeSet;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import controleur.Controleur;

//faire un bouton pour retirer des evts de la frise ?0

public class FormulaireEvts extends JPanel implements ActionListener {
 
 JPanel panelCentre = new JPanel();
 
 final String INTITULE_BOUTON_AJOUT = "Ajout";
 final String INTITULE_BOUTON_QUITTER = "Quitter";
  
  
  private static final long serialVersionUID = 1L;  
  //éléments graphiques
  final String [] POIDS = {"1", "2", "3", "4", "5"}; 
  
   JButton boutonAjout = new JButton(INTITULE_BOUTON_AJOUT);
   JButton boutonQuitter = new JButton (INTITULE_BOUTON_QUITTER);
  
   JComboBox <String>  champpoidsEvt = new JComboBox<String>(POIDS);
   
   
   
   JTextField champNomEvt = new JTextField(15);
   JTextField champDateEvt = new JTextField(15);
   JTextArea champDescrEvt = new JTextArea(10,10);
  
   
 public FormulaireEvts() {
  
 
  setLayout(new GridBagLayout());
  GridBagConstraints contrainte = new GridBagConstraints();
  contrainte.insets = new Insets(6,6,6,6);
  contrainte.anchor = GridBagConstraints.WEST;
  
  File repertoire = new File("Frise");
  String[] files=repertoire.list();  
  
  JLabel titreFormulaire = new JLabel("Formulaire d'ajout d'événements", JLabel.CENTER);
   JLabel nomFrise =new JLabel("Frise :"+ files[1], JLabel.CENTER);
   JLabel partieEvenements = new JLabel("Partie événements :", JLabel.LEFT);
   JLabel nomEvenement = new JLabel("Nom de l'événement :", JLabel.LEFT);
   JLabel dateDebutEvt = new JLabel("Date de l'événement :", JLabel.LEFT);
   JLabel ajoutImage = new JLabel("Image de l'événement :", JLabel.LEFT);
   JLabel descriptionEvt = new JLabel("Description de l'événement :", JLabel.LEFT);
   JLabel poidsEvt = new JLabel("Importance de l'événement (poids) :", JLabel.LEFT);


   
   
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(nomFrise,contrainte);
 
  
  
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(titreFormulaire,contrainte);

  
  
  
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(nomEvenement,contrainte);
  
  contrainte.gridx++;
  contrainte.gridwidth = 4;
  contrainte.fill=GridBagConstraints.HORIZONTAL;
  this.add(champNomEvt,contrainte);
  contrainte.fill=GridBagConstraints.NONE;
  
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(dateDebutEvt,contrainte);
  
  contrainte.gridx++;
  contrainte.gridwidth = 4;
  contrainte.fill=GridBagConstraints.HORIZONTAL;
  this.add(champDateEvt,contrainte);
  contrainte.fill=GridBagConstraints.NONE;
  
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(poidsEvt,contrainte);
  
  contrainte.gridx++;
  contrainte.gridwidth = 1;
  this.add(champpoidsEvt,contrainte);
  
  
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.anchor=GridBagConstraints.NORTHWEST;
  this.add(descriptionEvt,contrainte);
  
  
  
  contrainte.gridwidth=4;
  contrainte.gridx++;
  contrainte.fill=GridBagConstraints.BOTH;
  this.add(new JScrollPane(champDescrEvt),contrainte);


  boutonAjout.setActionCommand(INTITULE_BOUTON_AJOUT);
  contrainte.gridx=0;
  contrainte.gridy++;
  contrainte.gridwidth = 1;
  this.add(boutonAjout, contrainte);
 
  contrainte.gridx++;
  this.add(boutonQuitter, contrainte);

  //this.add(panelCentre);

  boutonAjout.addActionListener(this);
  boutonQuitter.addActionListener(this);
 }


 public void actionPerformed(ActionEvent parEvt) {
  Evenement evt;
  if (parEvt.getSource () == boutonAjout)
  {
   evt = new Evenement(champNomEvt.getText(),champDescrEvt.getText(),Integer.parseInt((String)(champpoidsEvt.getSelectedItem())));
   Date dateEvt = new Date(Integer.parseInt(champDateEvt.getText()));
   
   Frise.ajout(dateEvt,evt);
   File repertoire = new File("Frise");
   String[] files=repertoire.list();
   
   champDescrEvt.setText("");
   champNomEvt.setText("");
   champDateEvt.setText("");
  }
  else if (parEvt.getSource () == boutonQuitter) {
   
   champDescrEvt.setText("");
   champNomEvt.setText("");
   champDateEvt.setText("");
   champpoidsEvt.setSelectedIndex(0);
  }
 }
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > Nolan
Modifié le 6 juin 2018 à 21:25
Voici mon code de test, donc la méthode d'ajout est correct...

class Date {
    int a;
    public Date(int a) { this.a = a; }
    public Integer getAnnee() { return a; }
}

class Evenement implements Comparable<Evenement> {
    private String s;
    public Evenement(String s, String t, int i) { this.s = s; }
    public int compareTo(Evenement e) { return s.compareTo(e.s); }
    public String toString() { return s; }
}

public static void main(String[] args) {
    Frise.ajout(new Date(2017), new Evenement("A17","",0));
    Frise.ajout(new Date(2017), new Evenement("B17","",0));
    Frise.ajout(new Date(2018), new Evenement("A18","",0));
    Frise.ajout(new Date(2018), new Evenement("B18","",0));
    System.out.println(Frise.chHashMap); // {2017=[A17, B17], 2018=[A18, B18]}
}
0
D'accord merci pour tout.Je dois avoir un autre problème parce que même avec ta fonction de test cela ne m'affiche que les premiers que j'ai rentré donc ceux avec le A.Mais je ne vois pas quoi.
0