2009-01-08 6 views
19

J'ai un tableau partiellement rempli d'objets, et quand je les parcoure, j'essaie 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 si c'est null semble à travers un NullPointerException. array.length inclura également tous les éléments null. Comment allez-vous vérifier null éléments dans un tableau? Par exemple dans le code suivant va lancer un NPE pour moi.Comment vérifier si l'élément de tableau est null pour éviter NullPointerException en Java

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

votre code ne me donne pas un NPR. Vous pouvez également utiliser "i d0k

+0

Il lancerait NPE si vous vérifiez '! SomeArray.equals (null)'. – bancer

Répondre

22

Vous avez plus de choses que vous ne le dites. J'ai couru l'exemple de votre essai élargi suivant:

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 le résultat attendu:

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

-vous peut-être essayer de vérifier les longueurs de someArray [index]?

+1

Pas de NPE non plus pour moi. –

+0

Merci! Je vais regarder dans plus. – user37857

1

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

1

Eh bien, tout d'abord ce code ne compile pas. Après la suppression du point virgule supplémentaire après i ++, il compile et fonctionne bien pour moi.

+0

Je l'ai déjà enlevé. :) –

6

Ce n'est pas le cas.

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

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> 
1

L'exemple de code ne lance pas un NPE. (il ne devrait pas y avoir un ';' derrière le i ++)

0

Je me battrais pour savoir si le code compile ou non créerait un tableau de sixe 5 add 2 valeurs et les imprimerait, vous obtiendriez les deux valeurs et d'autres sont null. La question est bien que la taille soit de 5 mais il y a 2 objets dans le tableau. Comment trouver combien d'objets sont présents dans le tableau

2
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 nul particulier, vous devez utiliser pour boucle comme ci-dessus.

0
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

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

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