Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ejerciciosCasa;
- /**
- *
- * @author Victor
- *
- */
- public class AleatorioRango {
- public int first = 0;
- public int last = 0;
- private int[] randoms;
- /**
- * Constructor de la clase. Definirá la primera y última posición del rango, y con estos datos crea el vector de randoms y lo iniciliza a -1
- * Comprobará que la primera posición del rango sea mayor o igual a 0 y que la última posición sea mayor que la primera
- * @param first int mayor o igual a 0 que indica la primera posición del rango
- * @param last int mayor que first que indica la última posición del rango
- */
- AleatorioRango(int first, int last) {
- if (first >= 0 && last > first) {
- this.first = first;
- this.last = last;
- randoms = new int[(last - first) + 1];
- for (int cont = 0; cont < randoms.length; cont++)
- randoms[cont] = -1;
- }
- }
- /**
- * Método get que devuelve la primera posición del rango
- * @return una variable de tipo int con la primera posición del rango
- */
- public int getFirst() {
- return first;
- }
- /**
- * Método get que devuelve la última posición del rango
- * @return una variable de tipo int con la última posición del rango
- */
- public int getLast() {
- return last;
- }
- /**
- * Redefinimos el método toString de la superclase Object para que devuelva como información el rango
- */
- public String toString() {
- return ("Devuelvo aleatorios entre " + first + " y " + last);
- }
- /**
- * Redefinimos el método equals de la superclase Objetct para que devuelva true si los dos objetos tienen el mismo rango
- */
- public boolean equals(Object c) {
- AleatorioRango al = (AleatorioRango) c;
- if (al.getFirst() == first && al.getLast() == last)
- return true;
- else
- return false;
- }
- /**
- * Devuelve un número aleatorio comprendido entre first - last ambos inclusive
- * @return Devuelve un número aleatorio
- */
- public int aleatorioSimple() {
- return (int) (Math.random() * (last - first + 1) + first);
- }
- /**
- * Devuelve un número aleatorio diferente cada vez, hasta completar el rango que se indicó. Una vez devuelto todos los aleatorios posibles devolverá -1
- * @return variable tipo entero temp que contendrá un número negativo o -1 si ya han salido todos los aleatorios posibles
- */
- public int aleatorioSinRepetir() {
- int temp = 0;
- while (aleatorioVacio()) {
- temp = aleatorioSimple();
- if (!buscaTemp(temp))
- return temp;
- }
- return -1;
- }
- /**
- * Recorre el vector randoms en busca del entero temp si lo encuentra devuelve true sino devuelve false y mete el valor de temp en la primera posición del
- * vector que esté vacía es decir con -1
- * @param temp variable de tipo entero donde se almacena el aleatorio generado por el método aleatorioSimple()
- * @return
- */
- private boolean buscaTemp(int temp) {
- boolean encontrado = false;
- boolean puesto = false;
- int cont = 0;
- while (!encontrado && cont < randoms.length) {
- if (randoms[cont] == temp)
- encontrado = true;
- cont++;
- }
- cont = 0;
- if (!encontrado) {
- while (cont < randoms.length && !puesto) {
- if (randoms[cont] == -1) {
- randoms[cont] = temp;
- puesto = true;
- }
- cont++;
- }
- }
- return encontrado;
- }
- /** Recorre el vector randoms en busca de -1 lo que significaría que aún tiene espacios libres
- *
- * @return true si en el vector aún quedan -1 lo que significaría que aún faltan aleatorios por salir.
- */
- private boolean aleatorioVacio() {
- boolean falta = false;
- int cont = 0;
- while (cont < randoms.length && !falta) {
- if (randoms[cont] == -1)
- falta = true;
- cont++;
- }
- return falta;
- }
- }
Add Comment
Please, Sign In to add comment