web-dev-qa-db-fra.com

Comment vérifier si l'élément de tableau est nul pour éviter NullPointerException dans Java

J'ai un tableau d'objets partiellement rempli, et lorsque je les parcourt, j'ai essayé de vérifier si l'objet sélectionné est null avant de faire d'autres choses avec. Cependant, même l'acte de vérifier s'il s'agit de null semble passer par un NullPointerException. array.length inclura également tous les éléments null. Comment procédez-vous pour vérifier les éléments null dans un tableau? Par exemple dans le code suivant lancera un NPE pour moi.

Object[][] someArray = new Object[5][];
for (int i=0; i<=someArray.length-1; i++) {
    if (someArray[i]!=null) { //do something
    } 
}
19
user37857

Vous en avez plus que ce que vous avez dit. J'ai exécuté le test étendu suivant à partir de votre exemple:

public class test {

    public static void main(String[] args) {
        Object[][] someArray = new Object[5][];
        someArray[0] = new Object[10];
        someArray[1] = null;
        someArray[2] = new Object[1];
        someArray[3] = null;
        someArray[4] = new Object[5];

        for (int i=0; i<=someArray.length-1; i++) {
            if (someArray[i] != null) {
                System.out.println("not null");
            } else {
                System.out.println("null");
            }
        }
    }
}

et a obtenu la sortie attendue:

$ /cygdrive/c/Program\ Files/Java/jdk1.6.0_03/bin/Java -cp . test
not null
null
not null
null
not null

Essayez-vous de vérifier la longueur de someArray [index]?

22
Richard Campbell

Ce ne est pas.

Voir ci-dessous. Le programme que vous avez publié fonctionne comme prévu.

C:\oreyes\samples\Java\arrays>type ArrayNullTest.Java
public class ArrayNullTest {
    public static void main( String [] args ) {
        Object[][] someArray = new Object[5][];
            for (int i=0; i<=someArray.length-1; i++) {
                 if (someArray[i]!=null ) {
                     System.out.println("It wasn't null");
                 } else {
                     System.out.printf("Element at %d was null \n", i );
                 }
             }
     }
}


C:\oreyes\samples\Java\arrays>javac ArrayNullTest.Java

C:\oreyes\samples\Java\arrays>Java ArrayNullTest
Element at 0 was null
Element at 1 was null
Element at 2 was null
Element at 3 was null
Element at 4 was null

C:\oreyes\samples\Java\arrays>
6
OscarRyz
String labels[] = { "MH", null, "AP", "KL", "CH", "MP", "GJ", "OR" }; 

if(Arrays.toString(labels).indexOf("null") > -1)  {
    System.out.println("Array Element Must not be null");
                     (or)
    throw new Exception("Array Element Must not be null");
}        
------------------------------------------------------------------------------------------         

For two Dimensional array

String labels2[][] = {{ "MH", null, "AP", "KL", "CH", "MP", "GJ", "OR" },{ "MH", "FG", "AP", "KL", "CH", "MP", "GJ", "OR" };    

if(Arrays.deepToString(labels2).indexOf("null") > -1)  {
    System.out.println("Array Element Must not be null");
                 (or)
    throw new Exception("Array Element Must not be null");
}    
------------------------------------------------------------------------------------------

same for Object Array    

String ObjectArray[][] = {{ "MH", null, "AP", "KL", "CH", "MP", "GJ", "OR" },{ "MH", "FG", "AP", "KL", "CH", "MP", "GJ", "OR" };    

if(Arrays.deepToString(ObjectArray).indexOf("null") > -1)  {
    System.out.println("Array Element Must not be null");
              (or)
    throw new Exception("Array Element Must not be null");
  }

Si vous voulez trouver un élément null particulier, vous devez utiliser la boucle for comme indiqué ci-dessus.

2
Lakshmi Prasanna

Eh bien, tout d'abord, ce code ne se compile pas.

Après avoir supprimé le point-virgule supplémentaire après i ++, il se compile et fonctionne correctement pour moi.

1
Dave Costa

L'exemple de code ne renvoie pas de NPE. (il ne devrait pas non plus y avoir de ';' derrière l'i ++)

1

Le code donné fonctionne pour moi. Notez que someArray [i] est toujours nul puisque vous n'avez pas initialisé la deuxième dimension du tableau.

1
Brett Daniel
public static void main(String s[])
{
    int firstArray[] = {2, 14, 6, 82, 22};
    int secondArray[] = {3, 16, 12, 14, 48, 96};
    int number = getCommonMinimumNumber(firstArray, secondArray);
    System.out.println("The number is " + number);

}
public static int getCommonMinimumNumber(int firstSeries[], int secondSeries[])
{
    Integer result =0;
    if ( firstSeries.length !=0 && secondSeries.length !=0 )
    {
        series(firstSeries);
        series(secondSeries);
        one : for (int i = 0 ; i < firstSeries.length; i++)
        {
            for (int j = 0; j < secondSeries.length; j++)
                if ( firstSeries[i] ==secondSeries[j])
                {
                    result =firstSeries[i];
                    break one;
                }
                else
                    result = -999;
        }
    }
    else if ( firstSeries == Null || secondSeries == null)
        result =-999;

    else
        result = -999;

    return result;
}

public static int[] series(int number[])
{

    int temp;
    boolean fixed = false;
    while(fixed == false)
    {
        fixed = true;
        for ( int i =0 ; i < number.length-1; i++)
        {
            if ( number[i] > number[i+1])
            {
                temp = number[i+1];
                number[i+1] = number[i];
                number[i] = temp;
                fixed = false;
            }
        }
    }
    /*for ( int i =0 ;i< number.length;i++)
    System.out.print(number[i]+",");*/
    return number;

}
0
nani

Vous pouvez le faire sur une seule ligne de code (sans déclaration de tableau):

object[] someArray = new object[] 
{
    "aaaa",
    3,
    null
};
bool containsSomeNull = someArray.Any(x => x == null);
0

En combattant si le code est en train de compiler ou non, je dirais que créer un tableau de six 5 ajouter 2 valeurs et les imprimer, vous obtiendrez les deux valeurs et les autres sont nulles. La question est bien que la taille soit de 5 mais il y a 2 objets dans le tableau. Comment trouver le nombre d'objets présents dans le tableau

0
sudhanshu