Java - numeros random unicos

 
Vista:

numeros random unicos

Publicado por angel (2 intervenciones) el 16/06/2007 20:46:45
tengo un pequeño problema tratando de crear uno numeros random que no se repitan

por lo que pude entender es que tengo que guardalos en un array y despues comparalos para k no se repitan pero no logro hacerlo.

espero que me puedan ayudar.
graicas de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:numeros random unicos

Publicado por Marco (57 intervenciones) el 17/06/2007 15:10:17
-Lo primero que tienes que hacer limitar cuantos numeros deseas generar.
-Luego defines la longitud del array con la Longitud que ya definiste de antemano.
-Haz un bucle. Ej

mientras(el array no este lleno)
{
n=generarnumero();
mientras(numero_este_en_el_array(n))
n=generarnumero();
introducir_numero_en_el_array(n);
}
y eso es todo.
para averiguar que el numero no este en el array tendrias que hacer una busqueda secuencial. algo asi:

for(i=0;longitud del array-1;i++)
{
SI(array[i]==numerogenerado) ENTONCES
return verdadero; //es decir que el numero ya esta en el array.
}
// si ha terminado de buscar en todo el array y no ha encontrado el numero entonces devolvemos falso
return falso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numeros random unicos

Publicado por ALROWS (46 intervenciones) el 17/06/2007 15:33:40
una forma....

int[] numeros= new int[100];
int pos=0;
int control =0;
int a;

for(b=0;b<30;b++)
{
do
{
numeros[pos]= (int)(Math.random()*30) ;
control=0;
for(a=0;a<pos;a++)
{
if(numeros[a]==numeros[pos]) control=1;
}
}
while(control==1);
System.out.print(" "+numeros[pos]);
pos++;

}

EXITOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numeros random unicos

Publicado por ALROWS (46 intervenciones) el 17/06/2007 15:33:52
una forma....

int[] numeros= new int[100];
int pos=0;
int control =0;
int a,b;

for(b=0;b<30;b++)
{
do
{
numeros[pos]= (int)(Math.random()*30) ;
control=0;
for(a=0;a<pos;a++)
{
if(numeros[a]==numeros[pos]) control=1;
}
}
while(control==1);
System.out.print(" "+numeros[pos]);
pos++;

}

EXITOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numeros random unicos

Publicado por angel (2 intervenciones) el 17/06/2007 22:57:58
gracias por la ayuda me es de mucha utilidad

good luck :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numeros random unicos

Publicado por Gonzalo (180 intervenciones) el 18/06/2007 09:18:06
Es una forma pero no es demasiado eficiente.

Estás sacando 30 números entre 0 y 29. Para hacerlo un poco más interesante vamos a hacerlo con 100.

Cuando sacas el primer número sale seguro, no ha salido antes. El segundo tiene 1 posibilidad entre 100 de ser repetido. Suponiendo que no lo es, lo sacamos. El tercero tiene 2 posibilidades entre 100 de ser repetido. Así vamos avanzando hasta que hacia el final, los números tienen cada vez más posibilidades de haber salido antes que de no haber salido.

El último número necesitará un montón de intentos hasta salir (sólo 1 entre 100 posibilidades de ser el que falta). Y sin embargo, ya sabemos cuál es, porque es el único que queda.

Y ahí está la clave. Dependiendo de las condiciones, hay algunos datos que nos permiten crear algoritmos mucho mejores.

En concreto, si hablamos de "números aleatorios que no se repiten" realmente ya no es una sucesión de números aleatorios. Lo que es, es una ordenación aleatoria de una serie de números.

Una serie de números aleatorios es potencialmente infinita y tiene que permitir (si no, no sería totalmente aleatoria) que haya repeticiones.
Mientras que una ordenación aleatoria lo que trata es que tenemos un conjunto determinado de números p.ej. [1,2,3,4,5,6,7,8,9,10] y queremos ordenarlos aleatoriamente.

No sé si es esto lo que quiere Ángel, pero si es eso, la forma de hacerlo es pensar así. Tenemos un array, y lo mezclamos aleatoriamente.

Un algoritmo típico es ir recorriéndolo y cambiando de sitio cada elemento con cualquier otro (incluyendo que se quede en su sitio). Algo como esto:

int[] numeros = new int[20]
int n = numeros.length;
for (int i = 0; i<n;i++) numeros[i] = i;

for (int i = 0; i<n-2; i++) {
// Tomamos al azar un indice entre i y el final
int j = i + (int)(Math.random()*(n-i));
// Intercambiamos numeros[i] y numeros[j]:
int temp = numeros[i];
numeros[i] = numeros[j];
numeros[j] = temp;
}

Si prefieres algo más simple podrías usar java.util.Arrays#sort(array,comparador) pasándole como comparador una función que genere números aleatorios. P.ej:

Integer[] numeros = new Integer[20];
int n = numeros.length;
for (int i = 0; i<n;i++) numeros[i] = new Integer(i+1);

Arrays.sort(numeros, new Comparator() {
public int compare(Object o1, Object o2) {
return ((int)(Math.random()*10) - 5);
}
});

Pero esta forma de hacerlo es bastante menos aleatoria que la anterior, los números tienden a estar más ordenados (los números bajos al principio y los altos al final).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numeros random unicos

Publicado por Duck (1 intervención) el 15/11/2007 22:13:52
Utilizando esos metodos siempre generan numero repetidos es mejor usas Shuffle que lo que hacer mezcla los indices

By Duck
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar