كيفية معرفة ما إذا كان عنصر مجموعة باطل لتجنب NullPointerException في جاوة
-
06-07-2019 - |
سؤال
ولدي مجموعة nfilled جزئيا من الكائنات، وعندما أعاد من خلالها حاولت أن تحقق لمعرفة ما إذا كان null
الكائن المحدد قبل أن أفعل أشياء أخرى معها. ومع ذلك، وحتى العمل للتحقق إذا كان null
يبدو من خلال NullPointerException
. وسوف تشمل جميع العناصر array.length
null
كذلك. كيف يمكنك أن تذهب نحو التحقق من وجود عناصر null
في مجموعة؟ على سبيل المثال في التعليمة البرمجية التالية سوف رمي NPE بالنسبة لي.
Object[][] someArray = new Object[5][];
for (int i=0; i<=someArray.length-1; i++) {
if (someArray[i]!=null) { //do something
}
}
المحلول
ولقد أكثر يدور من قال لك. ركضت اختبار موسع التالية من المثال الخاص بك:
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");
}
}
}
}
وحصل على الناتج المتوقع:
$ /cygdrive/c/Program\ Files/Java/jdk1.6.0_03/bin/java -cp . test
not null
null
not null
null
not null
هل ربما في محاولة للتحقق من أطوال someArray [المؤشر]؟
نصائح أخرى
وولا.
وانظر أدناه. البرنامج الذي شارك يدير كما يفترض.
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");
}
إذا كنت ترغب في العثور على عنصر معين لاغية، يجب عليك استخدام للحلقة كما ذكر أعلاه.
وكود معين يعمل بالنسبة لي. لاحظ أن someArray [أنا] لاغيا دائما منذ كنت لم تهيئة البعد الثاني للمجموعة.
حسنا، أولا وقبل كل هذا الرمز لا ترجمة.
وبعد إزالة منقوطة إضافية بعد ط ++، فإنه يجمع ويعمل بشكل جيد بالنسبة لي.
ورمز المثال لا بطرح NPE. (أيضا لا ينبغي أن يكون هناك '؛' وراء ط ++)
والقتال سواء رمز بتجميع أو لا أود أن أقول إنشاء مجموعة من sixe 5 إضافة 2 القيم وطباعتها، سوف تحصل القيمتين والبعض الآخر لاغيا. والسؤال هو على الرغم من أن حجم 5 ولكن هناك 2 الكائنات في مجموعة. كيفية العثور على عدد الكائنات الموجودة في مجموعة
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;
}
ويمكنك القيام بذلك على سطر واحد من التعليمات البرمجية (بدون إعلان مجموعة):
object[] someArray = new object[]
{
"aaaa",
3,
null
};
bool containsSomeNull = someArray.Any(x => x == null);