Java -> llenar vector de enteros aleatoriamente sin repeticion

Bam_Margera
Antes era steve-0  Mensajes: 2288
Lugar: Deia, Mallorca · 657 mensajes · Colección
#1  Enviado: 17:02 03/01/2008

hola,

alguiens sabe cómo puedo hacer eso?

por ejemplo, con valores  que pertenecen ( 1-10 ) pero que no se repitan y esten todos

meeercy!
Bam_Margera (5) -> DarkWorld, Sub-Zero, Pesta, N64Master, HermanoGris
tarod.net
Lugar: Kakariko · 6611 mensajes · Colección
#2  Enviado: 17:31 03/01/2008

Mmmm... me da a mí que una forma directa no hay, vas a tener que combinar "randoms" con búsquedas, de modo que si el nuevo elemento insertado no existe, se introduzca. Así, n veces.
大神
putero
Lugar: badalona · 4659 mensajes · Colección
#3  Enviado: 17:56 03/01/2008

yo creo como tarod, usas una funcion de random estilo  

Random randomGenerator = new Random();
   for (int idx = 1; idx <= 10; ++idx){
     int randomInt = randomGenerator.nextInt(10);

y le sumas 1 porque los genera de 0 a 10 .

esto lo metes en tu vectir y compruebas que no existiera antes, si existe generas otro random antes de acabar la iteración , repites esta operacion hasta que se te genere un numerop no usado .

Lo malo de este metodo es que si lo que quieres es llenar un vector de 10 posiciones con los numeros del 1 al 10 en orden random cada posicion sera mas dificil de rellenar que la anterior, aunque poderse se peude hacer
Memento mori
pirucho
Synthoid por la gracia de Crammond
Lugar: somewhere below world 9999 · 7939 mensajes · Colección
#4  Enviado: 18:08 03/01/2008

prueba con una lista en anillo, cada vez que quites un item de la lista ya sabes que no lo volveras a poner en el vector y para seleccionar de modo aleatorio el siguiente item haz una "ruleta" con el anillo.
tarod.net
Lugar: Kakariko · 6611 mensajes · Colección
#5  Enviado: 13:12 04/01/2008

Para pirucho:
Sip, es muy buena idea Guiño
大神
Wolf_1
Lugar: · 15188 mensajes · Colección
#6  Enviado: 13:23 04/01/2008

Defines un vector con los valores que quieras y otro vector vacio. Haces un Random del primer vector para que te de una posición i,  y metes el valor obtenido de esa posición en el segundo, solo en caso de que ese valor no exista en el segundo ya (lo recorres para comprobarlo). Eso en un bucle hasta que el número de elementos del segundo sea igual al número de elementos del primero o a la cantidad de elementos que consideres tu si no lo quieres entero..

Es una solución muy simple pero poco eficiente. Pero si son pocos elementos no pasa nada.

Existen muchas variantes de este método. Para optimizar podrías coger y reescribir el vector original con el mismo, menos esa posición por ejemplo. Pero vamos, yo creo que sin optimizar te iría bien con lo que he puesto.

Y si no, te han dado otras alternativas .)

Veces editado: 2
Última edición: 04/01/2008 13:29
RetroLover
Este tema está inactivo y no se puede replicar más.
Buscar en el foro: En foro: Tipo:
Foro de Vandal
Flecha subir