أنماط المصفوفات ثنائية الأبعاد الشائعة
جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 8 من 59.
تظهر أنماط معينة غالباً عند التعامل مع المصفوفات ثنائية الأبعاد (2D arrays). يمكن أن يساعدك التعرف على هذه الأنماط في حل المشكلات بشكل أكثر كفاءة. إليك بعض الأنماط الشائعة:
الاجتياز القطري
الوصول إلى العناصر حيث يتساوى فهرس الصف مع فهرس العمود (matrix[i][i]) يعطيك القطر الرئيسي. بالنسبة للقطر الفرعي (anti-diagonal)، فإن مجموع فهرسي الصف والعمود يساوي حجم المصفوفة ناقص 1 (matrix[i][size - 1 - i]).
على سبيل المثال:
1 2 3
4 5 6
7 8 9التنقل عبر القطر الرئيسي (matrix[i][i]): 1, 5, 9
التنقل عبر القطر الثانوي (matrix[i][size - 1 - i]): 3, 5, 7
اجتياز الحدود
للانتقال عبر عناصر الحدود، عليك إبقاء أحد الفهارس ثابتاً (0 أو size - 1) بينما تقوم بالتكرار عبر الآخر.
للوصول إلى الحدود العلوية، يمكنك التكرار عبر الأعمدة مع تثبيت فهرس الصف عند 0.
على سبيل المثال:
1 2 3 4
5 6 7 8
9 10 11 12عناصر الحدود: 1، 2، 3، 4، 8، 12، 11، 10، 9، 5 (الكل باستثناء 6 و 7)
التحدي
سهلأنشئ دالة باسم printPatterns تأخذ مصفوفة مربعة ثنائية الأبعاد من الأعداد الصحيحة (matrix) كمدخل وتطبع الأنماط التالية:
- القطر الرئيسي (Main Diagonal): اطبع جميع العناصر التي يتساوى فيها فهرس الصف مع فهرس العمود.
- القطر المعاكس (Anti-Diagonal): اطبع جميع العناصر التي يساوي فيها مجموع فهرسي الصف والعمود حجم المصفوفة ناقص 1.
- الحدود (Borders): اطبع عناصر الحدود العلوية، والسفلية، واليسرى، واليمنى للمصفوفة.
يجب أن يبدو المخرج كما يلي:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16ورقة مرجعية
أنماط اجتياز المصفوفات ثنائية الأبعاد الشائعة:
الاجتياز القطري (Diagonal Traversal)
القطر الرئيسي: matrix[i][i] (فهرس الصف يساوي فهرس العمود)
القطر الثانوي: matrix[i][size - 1 - i] (مجموع فهرسي الصف والعمود يساوي size - 1)
1 2 3
4 5 6
7 8 9القطر الرئيسي: 1، 5، 9
القطر الثانوي: 3، 5، 7
اجتياز الحدود (Border Traversal)
اجعل أحد الفهارس ثابتاً (0 أو size - 1) أثناء التكرار عبر الآخر:
- الحد العلوي: row = 0، كرر عبر الأعمدة
- الحد السفلي: row = size - 1، كرر عبر الأعمدة
- الحد الأيسر: column = 0، كرر عبر الصفوف
- الحد الأيمن: column = size - 1، كرر عبر الصفوف
جرّب بنفسك
// اكتب كودك فقط داخل الكلاس. لا تكتب main() أو أي كود خارج هذا الكلاس.
class PrintPatterns {
public static void printPatterns(int[][] matrix) {
// اكتب كودك هنا
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكم