[Solucionado]Como puedo mezclar un arreglo

Iniciado por PabloPbl, 6 Febrero 2015, 02:02 AM

0 Miembros y 1 Visitante están viendo este tema.

PabloPbl

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 (java) [Seleccionar]

ArrayList array = new ArrayList();
array.add("Elemento 1");
array.add("Elemento 2");
array.add("Elemento 3");

//Algun metodo para mezclar el arrayList??
array.mezclarElementos();

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.

Usuario Invitado

Solo crea dos listas y luegos usas el método addAll para agregarlas a una tercera.

Código (java) [Seleccionar]
List<String> listOne = Arrays.asList("One", "Two", "Three");
List<String> listTwo = Arrrays.asList("Four", "Five", "Six");

List<String> fullList = new ArrayList<>();
fullList.addAll(listOne);
fullList.addAll(listTwo);


Hazlo en un método para que las listas temporales se eliminen al terminar la ejecución del método.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

MNicolas

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!

Usuario Invitado

#3
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 (java) [Seleccionar]
/* semilla que tomara el constructor de Random para generar un numero
* aleatorio siempre diferente. Si le pasamos la misma semilla, siempre
* generara el mismo numero, ya que Random genera numeros pseudo aleatorios.
* la semilla siempre sera diferente al usar System.nanoTime()
*/
public void process() {
List<String> list = Arrays.asList("A", "B", "C", "D", "E"); // lista original
List<String> tempList = new ArrayList<>(list); // lista temporal
suffleList(tempList); // mezclar
}
private void suffleList(List<String> list) {
final long seed = System.nanoTime();
Collections.shuffle(list, new Random(seed));
}

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

PabloPbl

El método shufle era lo que buscaba muchas gracias a todos igual. ;D