🌀 فهم الحلقات المتداخلة في جافا: قوة التكرار داخل التكرار
مرحباً بك في درس جديد! بعد أن أتقنت استخدام الحلقات البسيطة مثل for و while، حان الوقت لرفع مستوى مهاراتك البرمجية. تخيل أنك تريد بناء جدار من الطوب؛ فأنت تكرر وضع الطوب في صف واحد (هذه حلقة)، ثم تكرر بناء عدة صفوف فوق بعضها (هذه حلقة أخرى داخل الأولى). هذا هو المبدأ الأساسي للحلقات المتداخلة أو Nested Loops.
الحلقة المتداخلة هي ببساطة حلقة داخل حلقة أخرى. تُستخدم عندما تحتاج إلى تنفيذ عملية تكرارية، وهذه العملية نفسها تحتاج إلى التكرار عدة مرات ضمن كل دورة من الدورات الخارجية.
🔍 كيف تعمل الحلقات المتداخلة؟
لنفهم البنية الأساسية. عندما نضع حلقة داخل أخرى:
- تبدأ الحلقة الخارجية دورتها الأولى.
- عند بداية كل دورة من الحلقة الخارجية، تبدأ الحلقة الداخلية وتنفذ جميع دوراتها بالكامل من البداية إلى النهاية.
- بعد أن تنتهي الحلقة الداخلية تماماً، تعود السيطرة للحلقة الخارجية لتنتقل إلى دورتها التالية.
- تتكرر هذه العملية حتى تنتهي جميع دورات الحلقة الخارجية.
التناظر: فكر في عقربي الساعة. الدقيقة (الحلقة الداخلية) يجب أن تكمل 60 دورة كاملة قبل أن تتحرك الساعة (الحلقة الخارجية) دورة واحدة فقط.
📝 بناء الحلقة for المتداخلة (الأكثر شيوعاً)
هذا هو الشكل الكلاسيكي للحلقات المتداخلة في جافا:
for (initialization; condition; update) {
// كود ينفذ قبل بدء الحلقة الداخلية
for (initialization; condition; update) {
// الكود الذي نريد تكراره
// هذا الكود ينفذ (عدد دورات الخارجي * عدد دورات الداخلي) مرة
}
// كود ينفذ بعد انتهاء الحلقة الداخلية
}
💡 مثال عملي بسيط: طباعة مستطيل من النجوم
لنطبق المفهوم. نريد طباعة شكل مستطيل بعرض 5 نجوم وارتفاع 3 صفوف.
public class NestedLoopExample {
public static void main(String[] args) {
// الحلقة الخارجية تتحكم في عدد الصفوف (الارتفاع = 3)
for (int row = 1; row <= 3; row++) {
// الحلقة الداخلية تتحكم في عدد النجوم في كل صف (العرض = 5)
for (int star = 1; star <= 5; star++) {
System.out.print("* "); // print لا println لطباعة النجوم في نفس السطر
}
// بعد انتهاء الحلقة الداخلية (طباعة 5 نجوم)، ننتقل لسطر جديد للصف التالي
System.out.println();
}
}
}
ماذا يحدث هنا خطوة بخطوة؟
row = 1: تبدأ الدورة الأولى للحلقة الخارجية.- تدخل الحلقة الداخلية وتنفذ 5 دورات كاملة:
star = 1, 2, 3, 4, 5. تطبع* * * * *في سطر واحد. System.out.println();تنقل المؤشر لسطر جديد.row = 2: الدورة الثانية للحلقة الخارجية. تبدأ الحلقة الداخلية من جديد (star = 1) وتطبع 5 نجوم أخرى في سطر ثانٍ.- تتكرر العملية حتى
row = 3.
النتيجة:
* * * * *
* * * * *
* * * * *
🔄 مثال آخر: إنشاء جدول الضرب البسيط
لننشئ جدول ضرب الجزء الأول من العدد 5.
public class MultiplicationTable {
public static void main(String[] args) {
int number = 5;
System.out.println("جدول ضرب العدد " + number);
// الحلقة الخارجية: تمثل المضروب فيه (من 1 إلى 10)
for (int i = 1; i <= 10; i++) {
// عملية الحساب والطباعة تتم داخل كل دورة من الحلقة الخارجية
int result = number * i;
System.out.println(number + " × " + i + " = " + result);
// لاحظ: لا يوجد حلقة داخلية هنا! هذا مجرد تكرار بسيط.
// هذا المثال للإيضاح وليس للحلقات المتداخلة.
}
}
}
لكن، كيف نستخدم الحلقات المتداخلة لجدول الضرب الكامل من 1 إلى 5؟
public class FullMultiplicationTable {
public static void main(String[] args) {
// الحلقة الخارجية للعدد الأول (من 1 إلى 5)
for (int a = 1; a <= 5; a++) {
// الحلقة الداخلية للعدد الثاني (من 1 إلى 10) لكل قيمة من a
for (int b = 1; b <= 10; b++) {
System.out.print(a * b + "\t"); // \t لإضافة تبويب لتنسيق الأعمدة
}
// بعد طباعة كل صف (كل عمليات ضرب العدد a) ننتقل لسطر جديد
System.out.println();
}
}
}
⚠️ ملاحظات هامة للمبتدئين
- اختيار أسماء متغيرات واضحة: استخدم
rowوcolumnأوiوjبدلاً من أسماء عامة مثلxوyلتفادي الارتباك. - ترتيب الدورات: تذكر دائماً أن الحلقة الداخلية تكمل جميع تكراراتها في كل تكرار للحلقة الخارجية.
- التعقيد: عدد المرات التي ينفذ فيها الكود الموجود في الحلقة الداخلية يساوي
(عدد تكرارات الخارجي) × (عدد تكرارات الداخلي). في مثال المستطيل: 3 × 5 = 15 مرة. - التداخل بأكثر من مستوى: يمكنك وضع حلقة داخل حلقة داخل حلقة (
forداخلforداخلfor)، لكن كن حذراً مع زيادة التعقيد.
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال