2010-03-03 27 views
69

मेरे पास int सरणी है जिसमें कोई तत्व नहीं है और मैं यह जांचने की कोशिश कर रहा हूं कि यह खाली है या नहीं।मैं कैसे जांच सकता हूं कि कोई सरणी खाली/खाली है या नहीं?

उदाहरण के लिए, नीचे दिए गए कोड में if-statement क्यों सच नहीं है?

int[] k = new int[3]; 

if(k==null) 
{ 
    System.out.println(k.length); 
} 
+0

क्या आप कोड का थोड़ा और अधिक पोस्ट कर सकते हैं? जिस चीज को सरणी शुरू किया गया है वह देखने के लिए उपयोगी होगा। –

+0

मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। निश्चित रूप से यह जांचने के लिए कि कोई सरणी शून्य है या नहीं (array == null) – Paul

+6

क्या आप नहीं चाहते हैं कि (k! = Null) – vickirk

उत्तर

152

null सरणी और एक खाली सरणी के बीच एक महत्वपूर्ण अंतर है। यह null के लिए एक परीक्षण है।

int arr[] = null; 
if (arr == null) { 
    System.out.println("array is null"); 
} 

"खाली" यहां कोई आधिकारिक अर्थ नहीं है। मैं 0 तत्व होने के रूप में परिभाषित करने के लिए खाली चुनने हूँ:

arr = new int[0]; 
if (arr.length == 0) { 
    System.out.println("array is empty"); 
} 

की "खाली" एक वैकल्पिक परिभाषा है अगर सभी तत्वों null हैं:

Object arr[] = new Object[10]; 
boolean empty = true; 
for (int i=0; i<arr.length; i++) { 
    if (arr[i] != null) { 
    empty = false; 
    break; 
    } 
} 

या

Object arr[] = new Object[10]; 
boolean empty = true; 
for (Object ob : arr) { 
    if (ob != null) { 
    empty = false; 
    break; 
    } 
} 
+0

अप, अंतिम स्निपेट में 'obj! - null' है, शायद' obj होना चाहिए! = null' –

+2

इस बारे में मत भूलना: org.apache.commons.lang3.ArrayUtils.isEmpty (k) – aholub7x

0

एक तत्वों के बिना int सरणी आवश्यक नहीं है null। यह केवल null होगा यदि इसे अभी तक आवंटित नहीं किया गया है। जावा सरणी के बारे में अधिक जानकारी के लिए this tutorial देखें।

void foo(int[] data) 
{ 
    if(data.length == 0) 
    return; 
} 
2

मैं .net पृष्ठभूमि से हूँ:

आप सरणी की लंबाई परीक्षण कर सकते हैं। हालांकि, जावा/सी # अधिक/कम समान हैं।

यदि आप एक गैर-आदिम प्रकार (आपके मामले में सरणी) को तुरंत चालू करते हैं, तो यह शून्य नहीं होगा।
उदा। int[] numbers = new int[3];
इस मामले में, अंतरिक्ष आवंटित किया जाता है & तत्व से प्रत्येक यह null हो जाएगा 0.

का डिफ़ॉल्ट मान है, जब आप इसे नहीं new अप करते हैं।
उदा। इसकी लंबाई पर

int[] numbers = null; // changed as per @Joachim's suggestion. 
if (numbers == null) 
{ 
    System.out.println("yes, it is null. Please new it up"); 
} 
+1

जावा में जो संकलित नहीं होगा, क्योंकि यह आपको बताएगा कि 'संख्या' अभी तक शुरू नहीं हुई है। "अनियमित" और 'शून्य' एक ही चीज़ नहीं हैं। –

+0

धन्यवाद Joachim। मैं 'int [] संख्याओं' को 'int [] संख्याओं == null' में बदलने के लिए पोस्ट को संपादित करूंगा; सी # में, यह मामला नहीं है। – shahkalpesh

14

देखो:

int[] i = ...; 
if (i.length == 0) { } // no elements in the array 

हालांकि यह सुरक्षित है एक ही समय में अशक्त के लिए जाँच करने के लिए:

if (i == null || i.length == 0) { } 
1

एक पूर्णांक सरणी शून्य के साथ initialised है तो यह नहीं होगा वास्तव में कभी नल शामिल हैं। ऑब्जेक्ट की केवल सरणी में प्रारंभिक रूप से शून्य होगी।

+0

क्या होगा यदि मुझे पूर्णांक –

+1

के लिए शून्य की जांच करनी है, तो आप int जैसे प्राइमेटिव के साथ शून्य की जांच नहीं कर सकते हैं। – objects

+2

इस बात पर निर्भर करता है कि आपने इसे कहां घोषित किया है, यदि कक्षा के सदस्य के रूप में, तो हाँ इसे शून्य के साथ प्रारंभ किया गया है। लेकिन जब किसी विधि के अंदर स्थानीय रूप से घोषित किया जाता है, तो मेरा मानना ​​है कि यह एक और मामला है ... आपको अपना प्रारंभिक मूल्य असाइन करना होगा। मुझे लगता है। सिर्फ एक विचार! – ultrajohn

-1

मेरा मानना ​​है कि क्या आप चाहते हैं

int[] k = new int[3]; 

if (k != null) { // Note, != and not == as above 
    System.out.println(k.length); 
} 

आप इसे newed तो यह अशक्त होने जा रहा कभी नहीं किया गया था कि।

29

पैकेज org.apache.commons.lang3 सरणी सुनिश्चित करता है से ArrayUtils.isNotEmpty(testArrayName)

+0

यह वही था जो मैं खोज रहा था –

0

यहाँ बिंदु बहुत साधारण रूप से उस चर कश्मीर अशक्त क्योंकि यह सरणी के लिए अंक नहीं है शून्य या रिक्त नहीं है। इससे कोई फर्क नहीं पड़ता कि सरणी खाली है। आपकी पोस्ट में शून्य परीक्षण केवल सत्य का मूल्यांकन करेगा यदि परिवर्तनीय के ने कुछ भी इंगित नहीं किया है।

1

मैंने नीचे जैसा परीक्षण किया था। आशा करता हूँ की ये काम करेगा।

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"); 
     } 
0

तुम भी देख सकते हैं कि इसकी लंबाई जानने द्वारा सरणी में किसी भी तत्व है वहाँ है, तो क्या यह रिक्त है की जाँच करने के अगर-बाकी बयान में डाल दिया।

int[] k = new int[3]; 
if(k.length == 0) 
{ 
//do something 
} 
संबंधित मुद्दे

 संबंधित मुद्दे