2010-04-14 5 views
7

असल में, मैं यह कोशिश कर रहा हूं, लेकिन यह केवल zeros से भरा सरणी छोड़ देता है। मुझे पता है कि इस तरह केजावा वर्धित लूप का उपयोग करके द्वि-आयामी सरणी कैसे भरें?

for (int i = 0; i < array.length; i++) 

लेकिन क्यों मेरे संस्करण काम नहीं कर रहा है के रूप में सामान्य for पाश के साथ इसे भरने के लिए? किसी भी सहायता की सराहना की जाएगी।

char[][] array = new char[x][y]; 
for (char[] row : array) 
    for (char element : row) 
     element = '~'; 

उत्तर

7

Sun Java Docs से:

तो जब आप के लिए-प्रत्येक पाश इस्तेमाल करना चाहिए?

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

+0

तो, इटरेटर के साथ यह काम करेगा? उत्तर देने के लिए आपका शुक्रिया। – Shark

+1

@ शार्क: सरणी एक पुनरावर्तक प्रदान नहीं करते हैं (जब तक कि आप उन्हें 'Arrays.asList() 'का उपयोग करके लपेटें), लेकिन एक सामान्य पुराना स्कूल फॉर-लूप बस ठीक काम करता है। –

4

इसका कारण यह है element चार स्मृति स्थान सरणी के अंदर करने के लिए एक सूचक नहीं है, यह, चरित्र की एक प्रति है तो बदल रहा है यह केवल प्रति बदल जाएगा। तो आप सरणी और वस्तुओं (सरल प्रकारों) का जिक्र करते समय केवल इस फ़ॉर्म का उपयोग कर सकते हैं।

0

असाइनमेंट केवल स्थानीय चर element बदलता है।

13

Thirler ने समझाया है कि यह क्यों काम नहीं करता है। हालांकि, अगर आप आप सरणियों को प्रारंभ करने में मदद करने Arrays.fill उपयोग कर सकते हैं:

char[][] array = new char[10][10]; 
    for (char[] row : array) 
     Arrays.fill(row, '~'); 
+0

संकेत के लिए धन्यवाद :) – Shark

+0

संकेत के लिए धन्यवाद – SHiRKiT

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