Modificar la clase Dado, añadiéndole varias funciones estáticas que se definen a continuación:
- String lanzamientos (Dado d, int v). Lanza el dado "d" tantas veces como se le indique y retorna un String con los resultados de las tiradas.
- int lanzamientos (Dado d1, Dado d2). Lanza los dos dados y devuelve la suma de las tiradas.
- Dado[] factoria (int d, int c). Construye tantos dados como se le indique en "d" y con las caras indicadas en "c". Devuelve una tabla con los dados creados.
- String[] lanzamientos (Dado[] t). Lanza cada uno de los dados de la tabla y los guarda en una tabla de String.
- String[] lanzamientos (Dado[], int v). Lanza cada dado de la tabla el número de veces que se indica y se guardan las tiradas de cada dado en la misma casilla de la tabla de String.
public class Dado { protected int caras; public Dado(int lados) { caras = lados; } public int tirarDado() { int aux; aux = (int) (Math.random()*caras+1); return aux; } public static String lanzamientos(Dado d, int veces){ StringBuffer aux = new StringBuffer(""); int i; for(i=0; i<veces; i++) aux.append(d.tirarDado()); return aux.toString(); } public static int lanzamientos(Dado d1, Dado d2){ return d1.tirarDado()+d2.tirarDado(); } public static Dado[] factoria(int cuantos, int caras){ Dado[] caja= new Dado[cuantos]; int i; for (i=0; i<caras; i++) caja[i]=new Dado(caras); return caja; } public static String[] lanzamientos(Dado[] caja){ int i; String[] res= new String[caja.length]; for (i=0; i<caja.length; i++) res[i]=Integer.toString(caja[i].tirarDado()); return res; } public static String[] lanzamientos(Dado[] caja, int veces){ int i, j; String[] res= new String[caja.length]; for (i=0; i<caja.length; i++){ res[i]=Dado.lanzamientos(caja[i], veces); } return res; } }
Crear ahora la clase DadoConMemoria, que herede de la anterior.
La clase DadoConMemoria funcionará de manera similar a la clase Dado, pero tendrá un historial en el que irá almacenando todas las tiradas realizadas.
Además, esta clase tendrá dos constructores:
- Un constructor por defecto, que construirá un dado con 6 caras.
- Un constructor que recibe el número de lados que tendrá el dado.
Se añadirán un atributo para guardar el historial de tiradas y las siguientes funciones:
- void reset(). Borra la memoria.
- Integer[] historico(). Retorna un listado de todos los valores obtenidos, desde la última tirada a la primera.
- Integer[] historico(int n). Retorna un listado de los últimos "n" valores obtenidos.
public class DadoConMemoria extends Dado { private ArrayList<Integer> historico=new ArrayList<Integer>(); public DadoConMemoria() { this(6); } public DadoConMemoria(int lados) { super(lados); } @Override public int tirarDado() { int aux; aux = (int) (Math.random()*caras+1); historico.add(0, aux); return aux; } public void reset() { historico = null; } public Integer[] historico() { Integer[] aux = new Integer[0]; aux=historico.toArray(aux); return aux; } public Integer[] historico(int ult) { Integer[] aux = new Integer[0]; aux=historico.subList(0, ult).toArray(aux); return aux; } }
No hay comentarios:
Publicar un comentario