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();