Tableau indexé par un enum

Tableau indexé par un enum - Java - Programmation

Marsh Posté le 29-11-2009 à 14:51:44    

Bonjour
 
J'ai une question vraisemblablement stupide, mais certains ont peut-être une réponse intelligente a y apporter...
 
 
J'ai un enum définit comme suit:
 
 

Code :
  1. enum Monnaie{DIXCENTIMES, VINGTCENTIMES, CINQUANTECENTIMES, UNEURO, DEUXEURO, CINQEURO};
  2. ...
  3. int[] caisse = new int[Monnaie];


 
Mais bien entendu cette notation ne marche pas. Comment faire pour pouvoir ensuite écrire:
 

Code :
  1. caisse[DIXCENTIMES] = 25;                // Nombres de pièces de 10 centimes dans la caisse


 
Manifestement je suis sur une mauvaise voie, mais j'arrive pas à trouver qqchose qui fonctionne.
 
D'avance merci de votre aide

Reply

Marsh Posté le 29-11-2009 à 14:51:44   

Reply

Marsh Posté le 29-11-2009 à 23:03:02    

Salut,
 
Si tu veux utiliser un tableau d'entiers, tu peux le faire comme ceci:
 

Code :
  1. enum Monnaie{DIXCENTIMES, VINGTCENTIMES, CINQUANTECENTIMES, UNEURO, DEUXEURO, CINQEURO};
  2.  
  3. int[] caisse = new int[Monnaie.values().length];
  4.  
  5. // Initialiser les caisses à 0
  6. for (Monnaie m : Monnaie.values()) {
  7.   caisse[m.ordinal()] = 0;
  8. }
  9.         
  10. caisse[Monnaie.DIXCENTIMES.ordinal()] = 25;


 
Si tu veux un code un peu plus propre et strict, tu peux utiliser une Map. Elle n'autorise pas à mettre un index sous forme d'entier arbitraire pour accéder à la donnée, on doit toujours passer la constante en paramètre.
 

Code :
  1. enum Monnaie{DIXCENTIMES, VINGTCENTIMES, CINQUANTECENTIMES, UNEURO, DEUXEURO, CINQEURO};
  2.  
  3. Map<Monnaie, Integer> caisse = new HashMap<Monnaie, Integer>();
  4.  
  5. // Initialiser toutes les caisses à 0
  6. for (Monnaie m : Monnaie.values()) {
  7.   caisse.put(m, 0);
  8. }
  9.  
  10. caisse.put(Monnaie.DIXCENTIMES, 25);



Message édité par cbeyls le 29-11-2009 à 23:16:12
Reply

Marsh Posté le 30-11-2009 à 09:56:14    

Merci pour ces deux solutions !
 
La deuxième est à mon humble avis nettement plus séduisante, mais je dois malheureusement utiliser la première.
 
Merci encore de ton aide !
 
 

Reply

Sujets relatifs:

Leave a Replay

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