2010-03-31 11 views
18

के लिए 'उन्नत' का उपयोग कर जावा में एक सरणी शुरू करना क्या लूप के लिए 'उन्नत' का उपयोग कर जावा में एक सरणी प्रारंभ करना संभव है?प्रत्येक लूप

उदा।

Integer[ ] numbers = new Integer[20]; 
    int counter = 0; 
    for (Integer i : numbers) 
    { 
     i = counter++; 
    } 

    for (Integer i : numbers) 
    { 
     System.out.println(i); 
    } 

यह सभी नल प्रिंट करता है, वह क्यों है?

+0

http://stackoverflow.com/questions/1823117/for-each-and-pointers-in-java –

उत्तर

23

नहीं, क्योंकि आप सरणी को असाइन नहीं कर रहे हैं, आप i नामक अस्थायी चर को असाइन कर रहे हैं। सरणी में परिवर्तन नहीं दिखता है।

निम्नलिखित सामान्य for लूप का उपयोग करके लगभग बराबर कोड दिखाता है। इससे यह देखना आसान हो जाता है कि यह सरणी को अपडेट करने में विफल क्यों होता है:

for (int j = 0; j < numbers.length; j++) { 
    Integer i = arr[j]; // i is null here. 
    i = counter++; // Assigns to i. Does not assign to the array. 
} 
2

मूल रूप से नहीं, जैसा आपकी इच्छा नहीं है। लूप के लिए 'उन्नत' में, छिपे हुए काउंटर तक पहुंचने का कोई तरीका नहीं है, और न ही को संबंधित सरणी स्लॉट पर पहुंचने के लिए न तो है।

0

आपके मामले में, आप नहीं कर सकते। प्रत्येक के लिए अंतर्निहित संग्रह पर पुनरावर्तक को छुपाता है, इसलिए यहां आप यह नहीं समझ सकते कि आप "संख्या" में कौन सी स्थिति वर्तमान में हैं जब आप सरणी को "प्रारंभ करना" कोशिश करते हैं। यह एक प्रयोग केस है जिसके लिए "उन्नत" लूप नहीं बनाया गया है।

1

'उन्नत' फॉर-लूप आपके लिए काउंटर का पर्दाफाश नहीं करता है, और इसलिए, आप विशिष्ट सरणी स्लॉट पर counter++ का परिणाम नहीं लिख सकते हैं।

आपका मामला वह मामला है जहां 'उन्नत' के लिए लूप नहीं बनाया गया है। देखें:

http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html

अंतिम अनुच्छेद पर एक नजर डालें।

3

आउटपुट के रूप में आपको शून्य मान क्यों मिलते हैं यह है कि आप सरणी में किसी भी मान को स्टोर नहीं करते हैं।

आप सरणी प्रारंभ करने में foreach पाश का उपयोग कर सकते हैं, लेकिन फिर आप मैन्युअल रूप से एक काउंटर बनाए रखना होगा सरणी तत्वों को संदर्भित करने के:

for (Integer i : numbers){ 
    numbers[counter] = counter; 
    counter++; 
}

जाहिर है, इस foreach पाश के लिए इच्छित उपयोग मामला नहीं है। अपनी समस्या को हल करने के लिए, मैं पाश के लिए "पारंपरिक" उपयोग करने का सुझाव होगा:

for (int i = 0; i < numbers.length; i++){ 
    numbers[i] = i; 
}

ध्यान दें, यह एक ही मूल्य Arrays.fill(int[] array, int val) उपयोग करने के साथ सभी तत्वों को भरने के लिए संभव है।

+0

भी इंटीजर [] के बजाय int [] का उपयोग करें जब तक आवश्यक न हो! – Nishu

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

  • कोई संबंधित समस्या नहीं^_^