में ऑब्जेक्ट्स प्रारंभ नहीं कर सकता है, मैं समस्या को तुरंत डुबकी दूंगा। मैं एक सीधा वर्गसरणी
class Vector{
float x, y;
}
है और एक अन्य वर्ग अपनी सदस्य के रूप में इन वस्तुओं की एक सरणी
Vector[] buffer;
मैं इसे इस तरह से प्रारंभ होते हैं:
buffer = new Vector[8];
for(Vector v: buffer)
v = new Vector();
लेकिन जब मैं पहुँच करने की कोशिश इस सरणी में इस ऑब्जेक्ट के सदस्य मुझे सीधे मेरे स्टैक ट्रेस पर एक नलपोइंटर एक्सेप्शन मिलता है। यही है, सरणी की वस्तुओं का निर्माण नहीं किया गया है। दूसरी ओर इस और अधिक परंपरागत कोड सिर्फ सही काम करता है:
buffer = new Vector[8];
for(int i = 0; i<8; i++)
buffer[i] = new Vector;
this के रूप में चर्चा यह बताते हैं, दोनों संकलन के बाद ही होना चाहिए।
मेरा प्रश्न है, क्यों प्रत्येक लूप आइटम सरणी से वस्तुओं को प्रारंभ/निर्माण करने में विफल रहता है?
यदि आप 8 को दोहराने के बजाय अपने लूप में बफर.लेथेंथ का उपयोग करते हैं तो यह हमेशा आपके सरणी के आकार के लिए सही होगा। अन्यथा यदि आप एक 8 को बदलते हैं और दूसरे को नहीं तो आप अंत तत्वों को याद करेंगे या बाध्य अपवाद से सरणी प्राप्त करेंगे। – n00begon
यह सिर्फ उदाहरण के लिए था। वास्तव में लूप के लिए पहले एक चर के लिए बफर। लम्बाई आवंटित करना और स्थिति के लिए इसका उपयोग करना प्रदर्शन के लिए थोड़ा बेहतर है- लगभग नगण्य- और मेरा सम्मेलन है। – mehmetminanc
वैसे भी वही अनुकूलन के बारे में एक प्रश्न भी है http://stackoverflow.com/questions/1208320/what-is-the-cost-of-calling-array-length – n00begon