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