Foro de elhacker.net

Programación => Java => Mensaje iniciado por: hardjesjlc en 9 Mayo 2010, 09:34 am



Título: como hacer un constructor con un iterador
Publicado por: hardjesjlc en 9 Mayo 2010, 09:34 am
Hola!
Os explico mi casa, porque estoy bloqueado buscando una solucion y no he visto nada parecido.
Tengo una clase enum con tipos de monedas (EUR, ESP...)
Y tengo Una clase Money con un constructor al que le entra un tipo de moneda y un valor.
Necesito Crear una moneda de Un objeto con cada tipo de moneda, pero hacerlo automaticamente me resulta complicado.
He intentado darle forma con un itrador pero no hay manera.
Alguna idea?
Un saludo!
Gracias!


Título: Re: como hacer un constructor con un iterador
Publicado por: hardjesjlc en 9 Mayo 2010, 10:30 am
Voy a poner un poco del codigo a ver si nos queda mas claro.

Tengo esta clase:
Código
  1. public enum Face {
  2. EUR, IEP, ITL, GRD, PTE, ESP, BEF, LUF, ATS, FRF, FIM, NLG, DEM, CYP, MLT, SIT, SKK
  3. }
  4.  

Y esta otra donde hago el constructor:
Código
  1. public class Money implements IMoney, IMoneyModel, Serializable {
  2.  
  3. private static final long serialVersionUID = 162297084430668524L;
  4.  
  5. Face face;
  6. float amount;
  7. static Map<Face, Float> euroExchange;
  8.  
  9. static {
  10. euroExchange = new HashMap<Face, Float>();
  11. euroExchange.put(Face.EUR, 1.0F);
  12. euroExchange.put(Face.IEP, 0.787564F);
  13. euroExchange.put(Face.ITL, 1936.27F);
  14. euroExchange.put(Face.GRD, 340.75F);
  15. euroExchange.put(Face.PTE, 200.428F);
  16. euroExchange.put(Face.ESP, 166.386F);
  17. euroExchange.put(Face.BEF, 40.3399F);
  18. euroExchange.put(Face.LUF, 40.3399F);
  19. euroExchange.put(Face.ATS, 13.7603F);
  20. euroExchange.put(Face.FRF, 6.55957F);
  21. euroExchange.put(Face.FIM, 5.94573F);
  22. euroExchange.put(Face.NLG, 2.20371F);
  23. euroExchange.put(Face.DEM, 1.95583F);
  24. euroExchange.put(Face.CYP, 0.585274F);
  25. euroExchange.put(Face.MLT, 0.4293F);
  26. euroExchange.put(Face.SIT, 239.64F);
  27. euroExchange.put(Face.SKK, 30.126F);
  28. }
  29.  
  30. public Money(Face face, float amount) {
  31. if (amount < 0.0)
  32. throw new IllegalArgumentException("'amount' must be greater or equal than zero");
  33. if (face == null)
  34. throw new IllegalArgumentException("'face' must not be null");
  35.  
  36. this.face = face;
  37. this.amount = round(amount);
  38. }
  39.  

Lo que quiero es hacer un objeto de cada tipo Face con el constructor y no se como recorrer face. O si lo mejor es hacer un iterador para recorrer el map.
Un saludo!


Título: Re: como hacer un constructor con un iterador
Publicado por: Chuidiang en 9 Mayo 2010, 11:38 am
No me he enterado muy bien, pero los enum tiene un método values() que te devuelve todos los posibles valores en un array y puedes recorrerlo

Face[] valores = Face.values();

Se bueno.


Título: Re: como hacer un constructor con un iterador
Publicado por: hardjesjlc en 9 Mayo 2010, 12:36 pm
Gracias, no habia caido en lo del metodo values.

A ver, lo que tengo que hacer es diseñar pruebas para una interfaz (es un proyecto de la uni) No pretendo que me digais como es, lo que quiero es saber como meterle mano.
Nos dan una clase que implementa a una interfaz con los metodos
Código
  1. Face getFace();
  2.  
  3. float getAmount();
  4.  
  5. IMoney add(IMoney money);
Y la clase enum Face.
Lo que tenemos que hacer es diseñar pruebas para ver que con el metodo ADD, se pasa correctamente de cualquier moneda del enum a Euros y viceversa.

Lo que yo hago es:
un setup multiple para crear una moneda de cada tipo + una moneda EURO y un test para ver si el cambio esta bien hecho.

El problema, es que nos dicen que usemos algo para iterar sobre enum y poder ir creando objetos de cada tipo de moneda y realizar assert, de forma que se pueda cambiar el numero de enu, (es decir, meter mas tipos de monedas) y que lso test sigan funcionando

Espero haberme explicado.


Título: Re: como hacer un constructor con un iterador
Publicado por: biribau en 9 Mayo 2010, 18:55 pm
No te entiendo bien, pero puedes cambiar ese código si no te gusta: Mira esto
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html (http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html)
Los enums son clases, puedes ponerle métodos y parámetros, además supongo que podrás extenderlos dinámicamente con subclases para añadir más, o simplemente, ponles un nombre como parámetro, así podrás crear más y ponerles nombre. También creo que puedes hacer que implementen una interfaz.