public class NoRepeatRandom { private int[] numeros = null; private int N = -1; private int numRestantes = 0; public NoRepeatRandom(int minVal, int maxVal){ N = (maxVal - minVal) + 1; numeros = new int[N]; int n = minVal; for(int i = 0; i < N; i++) numeros[i] = n++; numRestantes = N; } public int getRandom(){ // Devuelve -1 cuando no quedan números if(numRestantes <= 0) return -1; // Si no, calculamos un índice aleatorio int index = (int) (numRestantes * Math.random()); int randNum = numeros[index]; // Desplazamos el valor obtenido al final del array, y // disminuimos el numero de elementos restantes: numeros[index] = numeros[size-1]; numeros[--numRestantes] = randNum; // Devolvemos el número aleatorio return randNum; } }
Para hacer uso de esta clase, deberemos crear un nuevo objeto de la siguiente forma:
public class Principal { public static void main(String[] args) { // El objeto random generará números aleatorios en el intervalo [1-1000] NoRepeatRandom random = new NoRepeatRandom(1, 1000); // El valor devuelto lo almacenamos en una variable tipo int: int num = random.getRandom(); .... } }