GOOGLE ADS

domingo, 1 de mayo de 2022

Lista de listas que mantienen el mismo valor en el bucle for Java [duplicado]

Esta pregunta ya tiene respuestas aquí:


Solución del problema

El problema en su código es que está usando la misma tempListinstancia en cada iteración.

Lo que está haciendo es simplemente tomar un List, clasificarlo en un orden específico, agregarlo a la lista de resultados y luego seguir trabajando en la misma instancia que ya se agregó al final List.

Ese mismo elemento en el que sigues trabajando se está ordenando desde afuera, pero es la misma lista que se encuentra dentro de la lista final Listy se agrega varias veces. De hecho, si imprimiera también su lista general en cada iteración, verá que cada uno de sus elementos cambia según la última permutación.

Para lograr lo que está tratando de hacer, debe crear una nueva instancia de tempList basada en su permutación anterior.

public static void nextPermutation(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
int temp = 0;
//Generating the first permutation equals to the array
List<Integer> listTemp = new ArrayList<>(Arrays.stream(nums).collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll));
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length - 1; j++) {
//Generating a new list instance with the elements of the previous permutation
listTemp = new ArrayList<>(listTemp);
//Permutation
temp = listTemp.get(j);
listTemp.set(j, listTemp.get(j + 1));
listTemp.set(j + 1, temp);
System.out.println("*" + listTemp + " *");
//Adding the new reference to the final list
list.add(listTemp);
}
}
System.out.println(list);
}

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...