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();
....
}
}