[JAVA] Problème méthode

Problème méthode [JAVA] - Java - Programmation

Marsh Posté le 22-12-2009 à 14:22:07    


Bonjour, je suis en train de créer une méthode pour répondre à une question de mon prof (je suis étudiant) et j'ai un problème par rapport à la question, je ne sais pas quoi ajouter à mon objet..
 
Voilà la question: Écrire la méthode getCatégories(nbJouets : entier) : Collection de Catégories de la
classe Catalogue qui retourne une liste d'objet Catégorie ayant un nombre de jouets
au catalogue égal à son argument nbJouets.
 
Voici ce que j'ai sur la classe Catalogue:

Code :
  1. Classe Catalogue
  2. privé
  3. année : Chaîne
  4. lesJouets : Dictionnaire de <Jouet, Entier>
  5. // Contient pour chaque jouet du catalogue :
  6. // - en clé, l’objet de la classe Jouet
  7. // - en valeur, la quantité de ce jouet distribuée pour ce catalogue
  8. public
  9. Constructeur Catalogue (uneAnnée : Chaîne)
  10. Fonction GetAnnée ( ) : Chaîne
  11. Fonction QuantitéDistribuée () : Entier
  12. // Retourne la quantité totale de jouets distribués pour ce catalogue.
  13. Fonction StatCatég () : Dictionnaire de <Catégorie, Entier>
  14. // Retourne un dictionnaire contenant pour chaque catégorie de ce catalogue :
  15. // - en clé, l’objet de la classe Catégorie
  16. // - en valeur, la quantité de jouets distribués pour cette catégorie.
  17. Fin classe


 
 
 
Et voici le code que j'ai réalisé:

Code :
  1. public Vector<Categorie> getCategorie(int nbJouets)
  2. {
  3.  int nombreJouets = nbJouets;
  4.  Vector res = new Vector<Categorie>();
  5.  for (int i = 1; i != nombreJouets; i++)
  6.  {
  7.   res.add();
  8.  }
  9.  return res;
  10. }


 
 
Mon problème est donc que je ne sais pas trop quoi ajouter à mon vecteur.. :/

Reply

Marsh Posté le 22-12-2009 à 14:22:07   

Reply

Marsh Posté le 22-12-2009 à 15:42:56    

Concrètement ton code est censé faire quoi ? Pour moi, d'après le sujet il faut que tu récupères les statistiques sur l'ensemble des catégories et que tu retournes les catégories pour lesquelles (quantité de jouets distribués == nbJouets).


---------------
www.blurk.fr
Reply

Marsh Posté le 22-12-2009 à 15:45:12    

Citation :

Fonction StatCatég () : Dictionnaire de <Catégorie, Entier>
// Retourne un dictionnaire contenant pour chaque catégorie de ce catalogue :
// - en clé, l’objet de la classe Catégorie
// - en valeur, la quantité de jouets distribués pour cette catégorie.


Je pense qu'il faut que tu mettes dans ton résultat, toutes les catégories issues de StatCatég() ayant nbJouets comme quantité

Reply

Marsh Posté le 22-12-2009 à 16:00:30    

J'ai compris que la méthode getCategories() retourne une liste d'objet Categories avec dedans autant de jouets que le nombre donné en paramètre..  :/

 

J'ai du mal comprendre ce que l'on attend..

 

Comment ça toutes les catégories de StatCatég()?
On pourrait comparer un dictionnaire à un vecteur?

 

Donc il faut parcourir le dictionnaire que renvoie StatCatég() en prenant chaque catégorie?


Message édité par absot77 le 22-12-2009 à 17:10:48
Reply

Marsh Posté le 22-12-2009 à 17:19:37    

Citation :

Comment ça toutes les catégories de StatCatég()?


Citation :

toutes les catégories issues de StatCatég() ayant nbJouets comme quantité


 
tu parcours le dictionnaire et pour chaque Catégorie tu compares le paramètre nbJouets avec la "quantité de jouets distribués pour cette catégorie" : si egal, tu ajoutes la catégorie à ton résultat.

Reply

Marsh Posté le 22-12-2009 à 18:50:20    

J'ai réalisé ce code, est-il bon?

Code :
  1. public ArrayList<Categorie> getCategorie(int nbJouets)
  2. {
  3.  int nombreJouets = nbJouets;
  4.  ArrayList<Categorie> res = new ArrayList<Categorie>();
  5.  for (int i=0; i!=lesJouets.length(); i++ )
  6.  {
  7.   if (nombreJouets == lesJouets.elementAt(i).getNombre())
  8.   {
  9.    res.add(lesJouets.elementAt(i).getJouet());
  10.   }
  11.  }
  12.  return res;
  13. }

Reply

Marsh Posté le 22-12-2009 à 18:54:18    

Je ne sais pas où est stockée la liste de catégories mais où qu'elle soit, tu devras la parcourir et comparer une certaine valeur d'une catégorie au paramètre.
 
En Java, un dictionnaire c'est une Map et une collection c'est une List.
 
Ton code là renvoie une liste de jouets, pas de catégories.

Message cité 1 fois
Message édité par cbeyls le 22-12-2009 à 18:55:50
Reply

Marsh Posté le 22-12-2009 à 19:02:08    

Non, la méthode getCategorie() doit rendre une liste d'objet Catégorie.

Reply

Marsh Posté le 22-12-2009 à 20:28:32    

cbeyls a écrit :

Je ne sais pas où est stockée la liste de catégories mais où qu'elle soit, tu devras la parcourir et comparer une certaine valeur d'une catégorie au paramètre.

 

En Java, un dictionnaire c'est une Map et une collection c'est une List.

 

Ton code là renvoie une liste de jouets, pas de catégories.

 
absot77 a écrit :

Non, la méthode getCategorie() doit rendre une liste d'objet Catégorie.

 

C'est exactement ce qu'il dit, le code que tu nous a montré n'est pas bon car il retourne une liste de jouet et non de catégories.

 

A ce niveau c'est plus un problème de compréhension que de programmation que tu as.

 

1) récupérer le "dictionnaire" avec la fonction StatCatég(), cette fonction fait partie de l'énoncé donc elle doit être fournie

Code :
  1. Map<Categorie, Integer> dictionnaire = StatCatég();
 

2) parcourir les élément du dictionnaire (Cf. javadoc Iterator et Map.keySet())

 

3) pendant le parcourt, pour chaque catégorie, comparer son nombre de jouet avec le paramètre et ...


Message édité par Bidem le 22-12-2009 à 20:29:13
Reply

Marsh Posté le 23-12-2009 à 01:16:32    

J'ai bien mal compromis ce que l'on attendais de moi, il faut que j'ajoute la catégorie et non le jouet.
 
Je peux aussi récupérer le dictionnaire avec un vector?
Je pensais faire:

Code :
  1. Vector<Categorie, Integer> dictionnaire = StatCatég();


 

Reply

Marsh Posté le 23-12-2009 à 01:16:32   

Reply

Marsh Posté le 23-12-2009 à 02:36:08    

Là il faut que tu revois tes cours et l'api java
 
Vector et ArrayList sont des List
 
Ton dictionnaire est une Map qui contient des association clé + valeur (ici la clé est une instance de Jouet et la valeur un Integer)
 
Ce que tu dois donc parcourir c'est les clés de ta Map : Map.keySet()

Reply

Marsh Posté le 23-12-2009 à 13:11:06    

Je n'ai jamais utilisé de dictionnaire donc voilà pourquoi j'ai du mal avec..  :/
 
Donc on récupère le dictionnaire avec une map, on le lit avec map.keySet() et dès que l'on trouve un jouet où le nombre est égal à celui passé en argument, on ajoute la catégorie dans un vector.
 
J'ai bien compris là?  :d

Reply

Marsh Posté le 23-12-2009 à 15:55:13    

Oui, c'est ça

Reply

Marsh Posté le 23-12-2009 à 18:02:36    

C'est ça mais il n'est pas question de jouets ici mais de catégories à parcourir, afin de trouver celles auxquelles appartiennent N jouets.
Et mettre tout ça dans une ArrayList et pas un Vector de préférence.

Reply

Marsh Posté le 23-12-2009 à 18:30:30    

J'ai essayé d'utiliser Iterator et keySet() pour la première fois, dîtes-moi si ça doit ressembler à ça s'il vous plait:

Code :
  1. public Vector<Catégorie> getCategorie(int nbJouets)
  2. {
  3. Map<Catégorie, Integer> dictionnaire = StatCatég();
  4. int nombreJouets = nbJouets;
  5. Vector<Catégorie> res = new Vector<Catégorie>();
  6. Iterator i = dictionnaire.iterator();
  7. while (i.hasNext())
  8. {
  9.  if (nombreJouets == dictionnaire.keySet().elementAt(i))
  10.  {
  11.   res.add(dictionnaire.keySet().elementAt(i));
  12.  }
  13.  }
  14.  return res;
  15.  }

Reply

Marsh Posté le 23-12-2009 à 19:49:40    

Là, il est temps d'apprendre à manipuler les Collection :
http://java.sun.com/docs/books/tut [...] ction.html

Reply

Marsh Posté le 23-12-2009 à 19:51:07    

C'est si grave que ça?  :/

Reply

Marsh Posté le 23-12-2009 à 22:34:10    

Fais une boucle for, ça sera plus simple (Java crée l'itérateur pour toi):
 

Code :
  1. for (Map.Entry<Catégorie, Integer> entry : dictionnaire.entrySet()) {
  2.   if (entry.getValue().intValue() == nombreJouets) {
  3.      res.add(entry.getKey());
  4.   }
  5. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed