Foro de elhacker.net

Programación => Java => Mensaje iniciado por: PabloPbl en 6 Febrero 2015, 02:02 am



Título: [Solucionado]Como puedo mezclar un arreglo
Publicado por: PabloPbl en 6 Febrero 2015, 02:02 am
Necesito mezclar los valores de un arreglo o de un ArrayList(con cualquiera me va).
Por ejemplo:
Tengo una arrayList, con 3 elementos
Código
  1. ArrayList array = new ArrayList();
  2. array.add("Elemento 1");
  3. array.add("Elemento 2");
  4. array.add("Elemento 3");
  5.  
  6. //Algun metodo para mezclar el arrayList??
  7. array.mezclarElementos();
  8.  
Y lo que necesito, es que el arraList se vuelva a ordenar de manera aleatoria, es una de las pocas cosas que me faltan para terminar un juego que estoy haciendo  ;D.


Título: Re: [Duda]Como puedo mezclar un arreglo
Publicado por: Usuario Invitado en 6 Febrero 2015, 03:30 am
Solo crea dos listas y luegos usas el método addAll para agregarlas a una tercera.

Código
  1. List<String> listOne = Arrays.asList("One", "Two", "Three");
  2. List<String> listTwo = Arrrays.asList("Four", "Five", "Six");
  3.  
  4. List<String> fullList = new ArrayList<>();
  5. fullList.addAll(listOne);
  6. fullList.addAll(listTwo);

Hazlo en un método para que las listas temporales se eliminen al terminar la ejecución del método.


Título: Re: [Duda]Como puedo mezclar un arreglo
Publicado por: MNicolas en 6 Febrero 2015, 18:22 pm
Te lo explico , porque lo que pides es lógica. El código hazlo tú :P

1. Creas otro arraylist.
2. Haces un bucle que se ejecute mientras en el arraylist que tienes (el original) haya contenido (hay métodos que te dicen si una arraylist está vacía)
3. Si no está vacía haces un random entre 0 y el tamaño del arraylist original.
4. Coges el contenido de index el número que te salió en el random.
5. Le haces .add a la arraylist que creamos en el punto 1 de contenido que sacamos en el punto 4.
6. Borramos del array original el contenido de dicho index.

Ya está
Un saludo!


Título: Re: [Duda]Como puedo mezclar un arreglo
Publicado por: Usuario Invitado en 6 Febrero 2015, 19:44 pm
Hmm leí mal el enunciado. Al parecer lo que deseas es mover aleatoriamente el contenido de la lista. Para mezclar puedes hacer uso del método shuffle() de la clase Collections. Para ordenar, puedes evitar trabajo solo creando una lista temporal.

Ejemplo:

Código
  1. /* semilla que tomara el constructor de Random para generar un numero
  2.  * aleatorio siempre diferente. Si le pasamos la misma semilla, siempre
  3.  * generara el mismo numero, ya que Random genera numeros pseudo aleatorios.
  4.  * la semilla siempre sera diferente al usar System.nanoTime()
  5.  */
  6. public void process() {
  7. List<String> list = Arrays.asList("A", "B", "C", "D", "E"); // lista original
  8. List<String> tempList = new ArrayList<>(list); // lista temporal
  9. suffleList(tempList); // mezclar
  10. }
  11. private void suffleList(List<String> list) {
  12. final long seed = System.nanoTime();
  13. Collections.shuffle(list, new Random(seed));
  14. }


Título: Re: [Duda]Como puedo mezclar un arreglo
Publicado por: PabloPbl en 6 Febrero 2015, 22:47 pm
El método shufle era lo que buscaba muchas gracias a todos igual. ;D