java - vacio - ¿Cómo puedo verificar si una matriz es nula/vacía?
saber si un array contiene un valor java (11)
Creo que lo que quieres es
int[] k = new int[3];
if (k != null) { // Note, != and not == as above
System.out.println(k.length);
}
Lo has actualizado para que nunca sea nulo.
Tengo una matriz int
que no tiene elementos y estoy tratando de verificar si está vacía.
Por ejemplo, ¿por qué el enunciado if en el siguiente código nunca es verdadero?
int[] k = new int[3];
if(k==null)
{
System.out.println(k.length);
}
El punto aquí es simplemente que la variable k no es nula porque apunta a la matriz. No importa que la matriz esté vacía. La prueba nula en su publicación solo se evaluaría como verdadera si la variable k no apunta a nada.
Hay una diferencia clave entre una matriz null
y una matriz vacía. Esta es una prueba para null
.
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
"Vacío" aquí no tiene ningún significado oficial. Elijo definir empty como teniendo 0 elementos:
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
Una definición alternativa de "vacío" es si todos los elementos son null
:
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
o
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
Mira su longitud:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
Aunque es más seguro comprobar nulo al mismo tiempo:
if (i == null || i.length == 0) { }
Probé como a continuación. Espero eso ayude.
Integer[] integers1 = new Integer[10];
System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array
for (Integer integer : integers1) {
System.out.println(integer); //prints all 0s
}
//But if I manually add 0 to any index, now even though array has all 0s elements
//still it is not empty
// integers1[2] = 0;
for (Integer integer : integers1) {
System.out.println(integer); //Still it prints all 0s but it is not empty
//but that manually added 0 is different
}
//Even we manually add 0, still we need to treat it as null. This is semantic logic.
Integer[] integers2 = new Integer[20];
integers2 = null; //array is nullified
// integers2[3] = null; //If I had int[] -- because it is priitive -- then I can''t write this line.
if (integers2 == null) {
System.out.println("null Array");
}
Soy de fondo .net. Sin embargo, java / c # son más o menos lo mismo.
Si instancia un tipo no primitivo (matriz en su caso), no será nulo.
por ej. int[] numbers = new int[3];
En este caso, el espacio se asigna y cada elemento tiene un valor predeterminado de 0.
Será null
, cuando no lo descubras.
p.ej
int[] numbers = null; // changed as per @Joachim''s suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
También puede verificar si hay algún elemento en la matriz descubriendo su longitud, luego colocarlo en la declaración if-else para verificar si es nulo.
int[] k = new int[3];
if(k.length == 0)
{
//do something
}
Una matriz int
sin elementos no es necesariamente null
. Solo será null
si aún no se ha asignado. Consulte este tutorial para obtener más información sobre las matrices de Java.
Puedes probar la longitud de la matriz:
void foo(int[] data)
{
if(data.length == 0)
return;
}
Una matriz int se inicializa con cero por lo que en realidad nunca contendrá valores nulos. Solo las matrices de Object contendrán null inicialmente.
ArrayUtils.isNotEmpty(testArrayName)
del paquete org.apache.commons.lang3
garantiza que Array no es nulo o está vacío
public boolean empty() {
boolean isEmpty = true;
int i = 0;
for (int j = 0; j < array.length; j++) {
if (array[j] != 0) {
i++;
}
}
if (i != 0) {
isEmpty = false;
}
return isEmpty;
}
Esto es lo más cerca que tengo de verificar si una matriz int está vacía. Aunque esto no funcionará cuando las entradas en la matriz sean realmente cero. Funcionará para {1,2,3}, y aún devolverá falso si {2,0} pero {0} devolverá verdadero