الحلقات المتداخلة والأنماط
الحلقات المتداخلة والأنماط
الحلقة المتداخلة هي ببساطة حلقة موضوعة داخل جسم حلقة أخرى. في كل مرة تُكمل فيها الحلقة الخارجية دورةً واحدة، تعمل الحلقة الداخلية حتى تنتهي كليًا. هذا الأسلوب هو أساس كل ما يتعلق بشبكة أو جدول أو نمط مكوّن من صفوف وأعمدة.
كيف يعمل التداخل — نموذج ذهني
فكّر في ساعة: عقرب الدقائق (الحلقة الداخلية) يُكمل دورة كاملة في كل مرة يتقدّم فيها عقرب الساعات (الحلقة الخارجية) خطوة واحدة. بشكل ملموس، إذا كانت الحلقة الخارجية تعمل 3 مرات والحلقة الداخلية 4 مرات، فإن جسم الحلقة الداخلية ينفَّذ 3 × 4 = 12 مرة إجمالًا.
المخرجات:
طباعة مستطيل من النجوم
أبسط الأنماط هو مستطيل مملوء. يتحكّم فيه متغيّران: rows وcols.
المخرجات:
مثلث قائم الزاوية
الحيلة في رسم المثلث هي جعل الحد الأعلى للحلقة الداخلية يعتمد على متغيّر الحلقة الخارجية. الصف الأول يطبع نجمة واحدة، والصف الثاني يطبع نجمتين، وهكذا.
المخرجات:
n - r + 1 كحد للحلقة الداخلية للحصول على مثلث مقلوب.
جدول الضرب
من أكثر تطبيقات الحلقات المتداخلة شيوعًا وفائدةً طباعة جدول الضرب. تتحكّم الحلقة الخارجية في الصف (المضروب الأول)، وتتحكّم الحلقة الداخلية في العمود (المضروب الثاني).
المخرجات:
تُنسّق System.out.printf الرقم في حقل بعرض ثابت حتى تتوازى الأعمدة بشكل أنيق بصرف النظر عن عدد أرقام الناتج.
اجتياز مصفوفة ثنائية الأبعاد
المصفوفات ثنائية الأبعاد في Java هي مصفوفات من مصفوفات. تُعلن عنها بالصيغة int[][] grid وتصل إلى عنصر بـgrid[row][col]. الحلقات المتداخلة هي الأسلوب الطبيعي لزيارة كل خلية.
المخرجات:
استخدام grid[row].length بدلًا من ثابت مكتوب مباشرة يجعل الكود آمنًا مع المصفوفات غير المنتظمة حيث قد تختلف أطوال الصفوف.
grid[col][row] — سيُسبّب خطأ ArrayIndexOutOfBoundsException فور اختلاف أحجام الصفوف والأعمدة.
الأداء: الحلقات المتداخلة هي O(n²)
إذا كانت كلتا الحلقتين تعملان n مرة، فإن جسم الحلقة الداخلية ينفَّذ n × n = n² مرة. لقيم n صغيرة هذا مقبول تمامًا. أما لمجموعات البيانات الكبيرة (آلاف الصفوف)، فتصبح الحلقات المتداخلة بطيئة بسرعة. لهذا يصبح فهم متى تكون الحلقة المتداخلة ضرورية — في مقابل استخدام بنية بيانات أو خوارزمية تتجنّبها — مهارةً جوهرية مع تقدّمك.
الخلاصة
- الحلقة المتداخلة تضع حلقة داخل أخرى؛ الحلقة الداخلية تكتمل كليًا في كل دورة خارجية.
- استخدم متغيّرات تحكّم منفصلة لكل مستوى من الحلقات.
- ربط الحد الداخلي بالمتغيّر الخارجي ينتج أنماط مثلث وهرم.
- الحلقات المتداخلة هي الأداة القياسية لجداول الضرب واجتياز المصفوفات ثنائية الأبعاد.
- إجمالي التكرارات = عدد دورات الخارجية × عدد دورات الداخلية — تذكّر هذا دائمًا من منظور الأداء.