foreach - Inconsistent behavior on java's for-each -


इस कोड पर विचार करें:

  वर्ग Jm44 {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग अरिज [] ) {Int [] arr = {1,2,3,4}; के लिए (int i: arr) {arr [i] = 0; } के लिए (int i: arr) {System.out.println (i); }}}  

यह प्रिंट करता है:

  0 3 0  

यह क्या है? प्रत्येक के लिए एरे में सभी तत्वों को चलाने के लिए माना जाता है, ऐसा क्यों arr [3] = 0 चलाता है लेकिन arr [2] = 0 ?

यदि आप पहले कोड में arr को क्या होता है, तो यह स्पष्ट हो जाता है ।

  int [] arr = {1, 2, 3, 4}; के लिए (int i: arr) {System.out.println ("i =" + i); आगमन [i] = 0; System.out.println ("arr =" + Arrays.toString (arr)); } के लिए (int i: arr) {System.out.println (i); }  

यह प्रिंट करता है:

 i = 1 arr = [1, 0, 3, 4] i = 0 arr = [0, 0, 3, 4] I = 3 arr = [0, 0, 3, 0] i = 0 arr = [0, 0, 3, 0] 0 ​​0 3 0 

आप सरणी में मानों को संशोधित कर रहे हैं, इंडेक्स के रूप में सरणी में मान "Foreach" लूप सरणी के मूल्यों के माध्यम से जाता है, सरणी के अनुक्रमणिका नहीं। वाक्यविन्यास चीनी को हटाने के बाद, यह है कि आपका foreach लूप वास्तव में क्या है:

  int [] arr = {1, 2, 3, 4}; (इंट इंडेक्स = 0; इंडेक्स & lt; arr.length; अनुक्रमणिका ++) के लिए {int i = arr [अनुक्रमणिका]; आगमन [i] = 0; } के लिए (int i: arr) {System.out.println (i); }  

सरणी को अनुक्रमणित करने में सक्षम होने के लिए, आपको लूप के लिए पारंपरिक का उपयोग करना होगा, जैसे:

  int [] arr = {1, 2, 3, 4}; के लिए (int i = 0; i & lt; arr.length; i ++) {arr [i] = 0; } के लिए (int i: arr) {System.out.println (i); }  

Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -