🔄 التكرار على المصفوفات في جافا: دليلك الشامل خطوة بخطوة

مرحباً بك في عالم البرمجة! تخيل أن لديك صندوقاً مليئاً بالأرقام أو الأسماء (مصفوفة)، وتريد أن تنظر إلى كل عنصر داخله على حدة. هذا بالضبط ما يفعله التكرار على المصفوفات! في هذا الدرس، سنتعلم كيف نستخدم الحلقات التكرارية (Loops) لزيارة كل عنصر في المصفوفة ومعالجته بسهولة وترتيب.


📝 لماذا نحتاج إلى التكرار على المصفوفات؟

تذكر أن المصفوفة (Array) هي حاوية تخزن مجموعة من العناصر من نفس النوع. ولكن كيف نصل إلى كل هذه العناصر دون كتابة كود منفصل لكل واحد؟ هنا يأتي دور الحلقات التكرارية. الفائدة الرئيسية هي:

  • الكفاءة: تنفيذ نفس العملية على مئات العناصر بسطرين أو ثلاثة فقط.
  • المرونة: يمكننا البحث عن عنصر، جمع الأرقام، طباعة جميع القيم، أو تعديلها بسهولة.

🔁 الطريقة الأولى: التكرار باستخدام حلقة for العادية

هذه هي الطريقة الكلاسيكية والأكثر استخداماً عندما تحتاج إلى معرفة رقم الفهرس (Index) لكل عنصر أثناء التكرار.

الخطوات:

  1. ننشئ متغير عداد (عادة i) يبدأ من الصفر (i = 0).
  2. نحدد شرط الاستمرار: أن يكون العداد أقل من طول المصفوفة (i < array.length).
  3. نزيد العداد في كل دورة (i++).
  4. داخل الحلقة، نصل للعنصر باستخدام array[i].

مثال واقعي بسيط: طباعة أسماء طلاب في فصل

public class Main {
    public static void main(String[] args) {
        // مصفوفة تحتوي على أسماء طلاب
        String[] students = {"أحمد", "سارة", "خالد", "فاطمة"};

        // التكرار على المصفوفة باستخدام for
        for (int i = 0; i < students.length; i++) {
            System.out.println("اسم الطالب: " + students[i]);
        }
    }
}

ماذا يحدث في الكود؟

  • students.length يعطينا طول المصفوفة (4).
  • الحلقة تبدأ بـ i = 0 وتطبع students[0] وهو "أحمد".
  • تزيد i لتصبح 1، تطبع students[1] وهو "سارة"، وهكذا حتى i = 3.
  • عندما تصبح i = 4، الشرط i < 4 يصبح خطأ، فتتوقف الحلقة.

🚀 الطريقة الثانية: التكرار باستخدام حلقة for-each (المحسنة)

جافا تقدم لنا طريقة أبسط وأكثر أماناً عندما لا نحتاج إلى معرفة رقم الفهرس، بل نريد فقط الوصول إلى قيمة كل عنصر.

التركيب:

for (dataType variableName : arrayName) {
    // كود التنفيذ
}
  • dataType: مثل String أو int.
  • variableName: متغير جديد يمثل قيمة العنصر الحالي في كل دورة.

مثال واقعي بسيط: جمع درجات الطلاب

public class Main {
    public static void main(String[] args) {
        // مصفوفة تحتوي على درجات الطلاب
        int[] grades = {95, 87, 78, 92};

        int total = 0; // متغير لتخزين مجموع الدرجات

        // التكرار على المصفوفة باستخدام for-each
        for (int grade : grades) {
            total = total + grade; // نضيف كل درجة إلى المجموع
        }

        System.out.println("المجموع الكلي للدرجات هو: " + total);
    }
}

ماذا يحدث في الكود؟

  • في الدورة الأولى، grade تأخذ قيمة grades[0] وهي 95.
  • في الدورة الثانية، grade تأخذ قيمة grades[1] وهي 87، وهكذا.
  • الحلقة تتوقف تلقائياً بعد زيارة كل عنصر في المصفوفة grades.

⚖️ مقارنة سريعة: for العادية vs for-each

الميزة حلقة for العادية حلقة for-each
الوصول للفهرس ✅ نعم، عبر المتغير i ❌ لا
سهولة القراءة جيدة ⭐ ممتازة وبسيطة
تعديل المصفوفة ✅ يمكن تعديل العنصر بـ array[i] = قيمة_جديدة ⚠️ يمكن تعديل العنصر إذا كان كائن، لكن ليس إعادة تعيين المرجع
الاستخدام المثالي عندما تحتاج الفهرس (كحذف، بحث، ترتيب) عندما تريد فقط قراءة أو معالجة القيم

💡 مثال تطبيقي شامل: البحث عن عنصر في مصفوفة

لنطبق ما تعلمناه في مثال مفيد: نبحث إذا كان اسم طالب معين موجوداً في القائمة.

public class Main {
    public static void main(String[] args) {
        String[] students = {"Ahmed", "Sarah", "Khaled", "Fatima"};
        String searchName = "Khaled";
        boolean isFound = false; // علم (flag) لتتبع إذا وجدنا الاسم

        // نستخدم for عادية لأننا قد نحتاج معرفة الفهرس
        for (int i = 0; i < students.length; i++) {
            if (students[i].equals(searchName)) {
                isFound = true;
                System.out.println("Found '" + searchName + "' at index: " + i);
                break; // نوقف الحلقة لأننا وجدنا ما نبحث عنه
            }
        }

        if (!isFound) {
            System.out.println("Sorry, the name '" + searchName + "' was not found in the list.");
        }
    }
}

ماذا سنتعلم في الدرس القادم؟ 🎯

الآن وقد أتقنت فن زيارة كل عنصر في المصفوفة، حان الوقت لتعلم كيفية تنظيم هذه العناصر! في الدرس القادم، سنتعرف على طرق ترتيب المصفوفات (Sorting) في جافا. سنرى كيف نرتب قائمة الأسماء أبجدياً أو الأرقام تصاعدياً وتنازلياً بكل سهولة باستخدام أدوات جاهزة في اللغة. استعد لجعل بياناتك أكثر ترتيباً ووضوحاً!