Wie kann man prüfen, ob Array-Element null Nullpointer in Java zu vermeiden
-
06-07-2019 - |
Frage
Ich habe eine teilweise nfilled Array von Objekten, und wenn ich sie durchlaufen habe ich versucht, um zu prüfen, ob das ausgewählte Objekt null
wird, bevor ich damit andere Sachen zu tun. Aber auch der Akt der Überprüfung, ob es null
ist offenbar ein NullPointerException
durch. array.length
alle null
Elemente als auch enthalten. Wie gehen Sie in einem Array für null
Elemente überprüft? Zum Beispiel in dem folgenden Code wird eine NPE für mich werfen.
Object[][] someArray = new Object[5][];
for (int i=0; i<=someArray.length-1; i++) {
if (someArray[i]!=null) { //do something
}
}
Lösung
Sie haben mehr los als Sie gesagt haben. Ich lief den folgenden erweiterten Test aus Ihrem Beispiel:
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");
}
}
}
}
und bekam die erwartete Ausgabe:
$ /cygdrive/c/Program\ Files/Java/jdk1.6.0_03/bin/java -cp . test
not null
null
not null
null
not null
Sind Sie möglicherweise versuchen, die Längen von EinArray [index] zu überprüfen?
Andere Tipps
Es ist nicht.
Siehe unten. Das Programm, das Sie geschrieben läuft wie angenommen.
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>
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");
}
Wenn Sie ein bestimmtes Nullelement finden wollen, sollten Sie sich für Schleife verwenden, wie oben gesagt.
Der angegebene Code funktioniert für mich. Beachten Sie, dass EinArray [i] ist immer null, da Sie die zweite Dimension des Arrays nicht initialisiert.
Nun, zunächst einmal, dass Code nicht kompiliert.
das zusätzliche Semikolon Nach dem Entfernen nach i ++ kompiliert es und läuft gut für mich.
Der Beispielcode keinen NPE werfen. (Es sollte auch nicht sein, ';' hinter dem i ++)
Kampf, ob der Code kompiliert oder nicht würde ich sagen, eine Reihe von sixe 5 add 2 Werte erstellen und ausdrucken, werden Sie die beiden Werte erhalten und andere sind null. Die Frage ist, obwohl die Größe 5 ist, aber es gibt 2-Objekte in der Anordnung. Wie finden Sie, wie viele Objekte in dem Array vorhanden sind
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;
}
Sie können es auf einer Zeile Code (ohne Array-Deklaration):
object[] someArray = new object[]
{
"aaaa",
3,
null
};
bool containsSomeNull = someArray.Any(x => x == null);