java: cómo mover elementos sin valores nulos a una nueva matriz

CorePress2024-01-24  9

Entonces, lo que estoy tratando de hacer es eliminar un elemento de una matriz y mover todos los elementos existentes a una nueva matriz sin el elemento nulo. Ya configuré el elemento que quería anular. Pero cuando intento usar este código, solo transfiere el primer elemento a la matriz, ninguno de los otros elementos se mueve. ¿Qué estoy haciendo mal?

Nota al margen: no tengo permiso para usar ArrayList.

   Object[] temp = new Object[sList.length-1];

   for (int j = 0; j < sList.length; j++){ 
         if (sList[j] != null) {
            temp[j] = sList[j];
         }
      } 

2

Necesita otro índice (por ejemplo, int i = 0) para su matriz temporal, luego cambie temp[j] = sList[j]; a temperatura[i++] = sList[j];

Lino

26/03/2021 a las 16:36



------------------------------------

No preasigne su matriz. Simplemente mueva los valores no nulos al frente de la matriz, manteniendo el orden.

Integer[] array = {null,1,2,3,null, 4,5,null, 6};
System.out.println("Before move: " + Arrays.toString(array));
int i = 0;
for (int k = 0; k < array.length; k++) {
    if (array[k] == null) {
        continue;
    }
    array[i++] = array[k];
}
System.out.println("After move: " + Arrays.toString(array));

Ahora tengo el número de elementos sin nulos. Así que úsalo para crear una nueva matriz.

Integer[] result = Arrays.copyOf(array,i);
System.out.println("New Array: " + Arrays.toString(result));

Impresiones

Before move: [null, 1, 2, 3, null, 4, 5, null, 6]
After move: [1, 2, 3, 4, 5, 6, 5, null, 6]
New Array: [1, 2, 3, 4, 5, 6]

Si no tienes permiso para usar Arrays.copy(), puedes hacerlo así.

Integer[] result = new Integer[i];
for (int k = 0; k < i; k++) {
   result[k] = array[k];
}

Nota: No incluí otras formas más simples (por ejemplo, secuencias, conjuntos) ya que si no puedes usar ArrayList, etc., probablemente tampoco debas usar otros métodos más avanzados.

1

Esto modifica la matriz anterior. Aún puedes asignarlo simplemente haciendo algo como oldArray = new Integer[size]; Por supuesto, estará vacío pero el nombre será el mismo.

- WJS

26/03/2021 a las 17:29



------------------------------------

Usar una lista<Objeto> para crear la matriz de destino.

List<Object> result = new ArrayList<>();

for (int j = 0; j < sList.length; j++){ 
    if (sList[j] != null) {
        result.add(sList[j]);
    }
}
Object[] temp = result.toArray();

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare