مرحباً و أهلاً و سهلاً مرة أخرى في مدونة علوم حيثُ نتحدثُ اليوم عن المصفوفات كمفهوم عام و عن المصفوفات في جافا بقليلٍ من التخصيص.
عندما تبدأُ بتعلم البرمجة بلغة الجافا ستكون -أو كانت- المصفوفات من أوائل ما تعلمته من أساسيات لغة الجافا.
لماذا؟
تعرف ما هو القطار أليس كذلك؟ و تعرف أيضاً كيف يتحرك القطار؟
قاطرة واحدة تُحرّك كُل تلك المقطورات لتصل إلى هدف معين و هي الوحيدة في القطار التي تملك محركاً و تتطلب صرف وقود.
ماذا سيحدث إذا كانت كل المقطورات منفصلة و تتحرك كل واحدة فيهم بمجهودها الخاص و تتطلب صرف الوقود و تواجد القائد و غير ذلك.
أليست نعمةً وجودُ نظام المقطورات؟
هذا هو مفهوم المصفوفات تماماً، فالمصفوفات وُجدت لتُساعدك على أن تتعامل مع الكائنات كمجموعات بدلاً عن التعامل مع كل كائن لوحده لأن ذلك يتطلب جهداً و وقتاً خاصاً لكل كائن.
لا تفكّر كثيراً، سيتضح لك الأمر حين تنتهي من مفهوم المفصفوفات في الجزء التالي.
المفهوم العام للمصفوفات لتطبقه على أي لغة برمجة
سأخبرُك في هذه الجزء بمفهوم المصفوفات عموماً دون التطرُّق للغات البرمجة و طريقة الكتابة و غير ذلك.
لماذا؟ كما ذكرتُ سابقاً في تدوينة عن لغات البرمجة فإن البرمجة هي طريقة تفكير قبل كُلّ شيء، مثل الروائي الذي يفكر في القصة و يكتبها.. أو يُنادي شخصاً آخر ليكتب عنه.
فالسّحرُ ليس في الكتابة و إنما في التفكير.
فلنعُد.. المصفوفات.
المصفوفات كما ذكرنا توفر لنا ميكانيكة -طريقة- للتعامل مع الكائنات كمجموعة واحدة، و مثلما ذكرنا مثال القطار أنظر هنا

مفهوم المصفوفات الأول: المصفوفة عبارة عن قطار، كُل مقطورة في هذا القطار تحتوي على كائن، و هذا الكائن من الممكن أن يكون حرفاً أو رقماً أو كلمة أو انساناً …إلخ.
مفهوم المصفوفات الثاني: نستطيع ملء القطار (المصفوفة) بكائنات مختلفة (أظنها واضحة وسهلة) في المركبة الأولى محمد و الثانية أحمد و الثالثة محمود و هكذا ولكن يجب أن تكون جميع الكائنات من نفس النوع.
مفهوم المصفوفات الثالث: في كل خانة (مقطورة أو قاطرة) بالقطار (المصفوفة) بالإمكان وضع كائن واحد فقط –تذكَر هذا المفهوم-.
مفهوم المصفوفات الرابع: لن تستطيع الوصول إلى صديقك في أي مقطورة ما لم تكن تعرف رقم المقطورة التي يجلس فيها، الترقيم يبدأ من الصفر (القاطرة حيثُ السائق) ثم 1 ، 2 ، 3 ، ..إلخ.
بإلتهامك لهذه المفاهيم الأربع تكونُ قد عرفت شكل المصفوفة و مفهومها العام لتطبق هذه المفاهيم مع أي لغة برمجة أخرى.. ولكن.. لم ننته بعد.
هناك مفهومُ آخر للمصفوفات يجب أن تعرفه أيضاً، و هو المصفوفة ثنائيةُ الأبعاد.
المصفوفة السابقة و التي تحتوي على صفٍ واحدٍ تُسمى بالمصفوفة ذاتُ البعد الواحد، هل تذكرُ المفهوم الذي طلبتُ منك تذكُّره؟ لا نستطيع وضع أكثر من كائنٍ في الخانة الواحدة.
ولكنك تستطيع التلاعب بهذا الشرط لتزيد من قُدرة المصفوفة على حل المشاكل.. كيف ذلك؟
يكونُ ذلك عن طريق وضع مصفوفة داخل كُل خانة من خانات المصفوفة، مثل وضع قطار في كل مقطورة من القطارات، فالقطار كائنٌ واحد 🙂 أليس كذلك؟

حتى تتخيل هذا الأمر سأسهّلهُ عليك و تخيل بدلاً من ذلك أن المصفوفة ثنائية الأبعاد عبارة عن طبق بيض.
المشكلة الأساسية في طبق البيض هو كيفية الوصول إلى صديقك في مقطورته، في القطار كُان قولك “صديقي يجلس في القاطرة رقم 0” يكفي لنعلم أنه يجلس في الخانة الأولى.
ولكن الآن الطريقة مختلفة مع المصفوفة ثنائية الأبعاد.
حتى تستطيع تحديد الموقع في المصفوفة ذاتِ البُعدين تحتاج إلى معلومتين على الترتيب:
- رقم الصف.
- رقم العمود.
لا تنسى أن الارقام تبدأ من صفر.
اللون الأزرق في الصور يمثل رقم الصف، و الرقم الأحمر يمثل رقم العمود.. بهذه البساطة.
فلنأخذ الأمر إلى مدى أبعد، هل تستطيع إنشاء مصفوفة ثلاثية الأبعاد بنفس المفاهيم؟
إذا استطعت فعل ذلك الآن فلا أعتقد أنه ستواجهك مشكلة في مفاهيم المصفوفات إطلاقاً.
هذه الصورة توضح لك ذلك.. نضعُ قطاراً في كل خانة في طبق البيض فتُصبح المعلومات المطلوبة حتى نعلم أين يجلس صديقك في مصفوفة ثلاثية الأبعاد هي على الترتيب:
- رقم الصف.
- رقم العمود.
- رقم المقطورة.

ماذا عن المصفوفة رباعية الأبعاد؟ بدون صورة 🙂 طبق بيض داخل طبق بيض، ما هي المعلومات المطلوبة لتحديد الموقع بالترتيب.
فكّر فيها قبل الإنتقال إلى الجزء التالي.
المعلومات المطلوبة لتحديد الموقع في المصفوفة رباعية الأبعاد:
- رقم الصف في الطبق الأول.
- رقم العمود في الطبق الأول.
- رقم الصف في الطبق الثاني (الداخلي).
- رقم العمود في الطبق الثاني (الداخلي).
إذاً كيف تُعرّف مصفوفة في لغة الجافا
لن أخوض كثيراً في هذه التدوينة عن الطريقة التقنية لكتابة المصفوفات و تعريفها، فإذا فهمت الفكرة أصبحت كتابةُ الشفرة تجري بين يديك كالسلسبيل، وربما أتناولها في تدوينةٍ أخرى.
//مصفوفة ذات بعد واحد تحتوي على عنصرين String OmanTrain[] = {"Ahmed", "Mohammed"}; //مصفوفة ذات بعدين تحتوي على عنصرين في كل بعد ثاني String JordanTrain[][] = { {"Ahmed", "Mohammed"}, {"Ali", "hussain"} }; //مصفوفة ثلاثية الأبعاد تحتوي على عنصرين في البعد الثالث String EgyptTrain[][][] = { { {"Ahmed", "ali"} } }; //تحديد طول المصفوفة بدون وضع القم String KuwaitTrain[]= new String[10]; String SudanTrain[][] = new String[2][10]; String AlgeriaTrain[][][] = new String[7][2][5];
هذه الجزئية من الشفرة المصدرية لإنشاء المصفوفات مع التجربة و استصحاب المفاهيم التي ذكرتُها لك مسبقاً ستسهل عليك الكثير جداً.
كل ما عليك فعله هو فهم الشفرة المصدرية المكتوبة و محاولة التعديل عليها و إنشاء مصفوفات بأطوال و طرق مختلفة من بنات أفكارك، و إذا استشكل عليك شيء بإمكانك وضع السؤال بالتعليقات كما يمكنك الاطلاع علي تدوينة أمثلة على استخدام المصفوفات في جافا.
ممكن شرح المصفوفات بمفهوم Oop اي كـ تعريفها private بالنفصيل
ربما يكون من احدى المواضيع القادمة..
كيف اكتب مصفوفه اسطرها اسماء يدخلها اليوزر وأعمدتها ارقام يدخلها اليوزر ايضا؟
ربما يكون الموضوع جزءاً من تدوينة قادمة
انا عندي مشكله انا لسه مبتدئ و معرفش اي حاجه نفسي اتعلم لغة الجافا من الالف للياء مع العلم انا لا اعرف عنها اي شئ و اواجه صعوبه في فهم مصطلحات الكمبيوتر المستدخمه اللي يريد يساعدني يتفضل و راح كلمو واتس ممنون
شكرا جزيلا أتمنى شرح مصفوفة المصفوفات أو مايسمى بالمصفوفة متعددة الابعاد
مرحباً بك أخي حسن،

مصفوفة المصفوفات في أبسط صورها هي مصفوفة ذات بعدين كما بالصورة أدناه. أي أن النتيجة واحدة (مصفوفة ذات بعدين أو مصفوفة مصفوفات).
اريد أن ادخل عدد طلاب الصف السادس
ومن ثم ادخال اسمائهم
اريد ذالك عن طريق المصفوفات
اتمنى المساعدة والايضاح
الأيميل :[email protected]
أجرِ محاولتك يا ساري، وإذا أوقفتك مشكلة شاركها معنا لنجد حلاً لها سوياً.
Array ?
?