metodo random

jacppe
23 de Mayo del 2005
holas, quiero saber como puedo generar numeros numeros en un metodo random, pero que ninguno se repita.
yo pongo esto:

for (int i = 0; i < 5; i++) {

numero = (int) (Math.random() * 5);

if ((int) n1 == numero) {

n1 = numero;
continue;
} else {
n1 = numero;
}
System.out.println(numero);
}

esto genera 5 numeros, pero a veces se repiten, o no aparecen 5 sino 3. ayuda plz

BorjaGT
23 de Mayo del 2005
mira, he creado una aplicación que te resuelve el problema... creo yo... jeje

a ver, pa empezar no es correcto utilizar una estructura FOR porque solo hará 5 veces el random, y si te sale uno repetido pues ha gastado igualmente esa "vuelta".

después, una tabla de enteros guarda los resultados, así puedes ir comprobando que los resultados del random no existan ya.

y para finalizar, los resultados van del 1 al 10. Si los quisieras del 0 al 9, ten cuidado porque al crear la tabla, se inicializa todo a 0, y si random==0 te diría que ya existe en la tabla y no lo guardaría, o sea que nunca te saldría la pregunta 0. Bueno, para esto hay diferentes soluciones...

Ahí va el código de ejemplo, en la siguiente respuesta, en que puedes ejecutar para que veas si funciona como querías:

BorjaGT
23 de Mayo del 2005
class aleatorios{
public static void main(String []args)throws Exception{
int n;
int numeros_guardados = 0;
int[] numeros = new int[5];

do{
n = (int)(Math.random() * 10) +1; //resultados comprendidos entre 1 y 10

if(!existe(numeros, n))
numeros[numeros_guardados++] = n;
}while(numeros_guardados < numeros.length);

muestra(numeros);
}

public static boolean existe(int[] tabla, int n){
int posicion = 0;
int tamaño = tabla.length;
boolean encontrado = false;

while(posicion < tamaño && !encontrado){
encontrado = tabla[posicion++] == n;
}

return encontrado;
}

public static void muestra(int[] tabla){
for(int i=0; i<tabla.length; i++){
System.out.println(tabla[i]);
}
}
}

jacppe
23 de Mayo del 2005
oye, gracias, ahora si me saldrá como keria, para q no se repita =). thanx

x
23 de Mayo del 2005
tal y como tiens tu código sólo pondras generar numeros enteros de 0 a 5, es por eso que la probabilidad de que se repita es bastante