أمثلة على استخدام المصفوفات في جافا


هل تعلم أن المصفوفات من أهم هياكل البيانات وأكثرها استخداماً من قبل مبرمجي لغة جافا وبعض اللغات الأخرى.

لا أُريد أن أقول لك أنه من المستحيل أن تكون مبرمجاً بلغة جافا دون أن تقوم  باستخدام المصفوفات, ولكن قريبٌ جداً من المستحيل.

كما شرحتُ مفهوم المصفوفات سابقاً، إن لم تكن تعلم ما هي المصفوفات يجبُ أن تطلع على شرحها أولاً, وكذلك شرحتُ بعض الدوال المهمة التي تختصرُ لك الشفرة المصدرية.

وهي مهمةٌ كذلك, ولكن تلقيتُ رسالةً من أحد قراء مدونة علوم الدائمين أثير وأقتبسُ لك من رسالتها

ما هي استخدامات المصفوفات؟
ما هي استخدامات المصفوفات؟

وبناءً على هذا الطلب أستعرضُ لك في هذه التدوينة بعض الاستخدامات البسيطة لها ,حتي تمتلك فكرةً عن طريقة الاستفادة من المصفوفات في البرمجة الفعلية.

وعلي الرغم من بساطة الأمثلة, إلا أنه من الممكن أن تجد أكثر المبرمجين خبرةً يستخدمها اليوم.

وذلك لأن المصفوفات كمفهوم عنصرٌ مهم لا فكاك منه, ولكن كشفرةٍ مصدرية من الممكن أن تُستبدل بالمجموعات Collections والتي ربما نتحدث عنها في مدونة علوم.

امثلة علي استخدام المصفوفات:

أولاً: مثال علي اختيار الفائزين.

الاختيار العشوائي للفائزين يعتبر الأشهر في برامج المسابقات، وهذه حالة من الممكن أن نستخدمها فيها .

افترض مثلاً أن المشاركة في المسابقة تتم عبر البريد الإلكتروني, ففي نهاية المسابقة وحتى تقوم بإجراء الاختيار العشوائي يجب أن تسترجع قائمة تحتوي على جميع البُرُد (جمع بريد) للاختيار من بينها.

لنفترض أن هذه هي القائمة

        String emails[] = {"[email protected]", "[email protected]", "ccc.aa.com"};

نأتي إلى عملية الاختيار العشوائي، والتي من الممكن أن تكتمل باختيار رقم عشوائي يقع بين صفر و (طول المصفوفة – 1) بحيث أن كل رقم في هذا المدى يؤشر إلى بريد إلكتروني مقابل، والذي يقع عليه الاختيار هو الفائز

        String emails[] = {"[email protected]", "[email protected]", "ccc.aa.com"};

        int winner = (int) (Math.random() * 10) % 3;

        System.out.println(emails[winner]);

ثانياً: مثال إرسال البيانات إلى واجهة المستخدم (نموذج).

أثناء تطويرك للبرامج ستمر عليك مفاهيم مهمة وهي:

  1. قواعد البيانات Database: وهي محل تخزين البيانات بحيث تستطيع الوصول إليها والتعديل عليها مستقبلاً.
  2. خلفية النظام Back-end: وهي نقطة الوصل بين قواعد البيانات وواجهة المستخدم، وفيها يوجد منطق النظام غالباً.
  3. واجهة النظام Front-end: وهي الواجهات التي يراها مستخدم النظام (شاشات وأزرار وصور وحقول وغيره).
إرسال البيانات إلى واجهة المستخدم
إرسال البيانات إلى واجهة المستخدم

تمرير البيانات بين هذه الأطراف الثلاث يكون أسهل عند تبني هيكل مشترك، والمصفوفات أحد هياكل البيانات التي يمكن الاعتماد عليها.

فبعد استرجاع البيانات من قواعد البينات من الممكن إعدادها في صورة مصفوفة وإرسالها إلى واجهة المستخدم لعرضها في الشكل المناسب.

علي سبيل المثال, لإرسال بيانات نموذج Form يحتوي على اسم الطالب وعمره والدرجة التي أحرزها لعرضها للمستخدم من الممكن أن تكون الشفرة المصدرية هكذا

        String formData[][] = {
            {"Ahmed", "15", "22"},
             {"Omer", "10", "15"},
             {"Ali", "13", "19"}
        };
        
        ShowForm(formData);
.

ثالثاً: مثال التعديل على بيانات النموذج.

استكمالاً للمثال السابق الخاص بواجهات المستخدم، ما زال بالإمكان الاستفادة من المصفوفات في واجهة المستخدم.

افترض أن المستخدم يستطيع التعديل على النموذج Form الذي يظهر أمامه.

بمعنى يستطيع أن يعدل في اسم الطالب وعمره ودرجته، وبنهاية التعديل يضغط على زر لحفظ البيانات في قاعدة البيانات.

التعديل على بيانات النموذج
التعديل على بيانات النموذج

من الممكن أن يتم حفظ بيانات النموذج في مصفوفة ثنائية الأبعاد بحيث يمثل كل صف من الصفوف طالباً، وعند التعديل على بيانات الطالب يتم حفظها في المصفوفة.

وعند الضغط على زر حفظ يتم إرسال المصفوفة مرة أخرى إلى خلفية النظام Back-end والتي تتكفل بإكمال عملية حفها في قاعدة البيانات Database.

        String formData[][] = {
            {"Ahmed", "15", "22"},
             {"Omer", "10", "15"},
             {"Ali", "13", "19"}
        };
        

        SaveForm(form);

توجد العديد من الاستخدامات المهمة للمصفوفات في واجهة المستخدم كذلك ستظهر لك مع تقدمك في عالم البرمجة.

رابعاً: مثال طباعة الشهور

مثالٌ آخر بسيط وسهل الفهم لوضوحه، وهو عملية طباعة تحويل رقم الشهر إلى اسم.

علي سبيل المثال, إذا كان رقم الشهر 3 تُطبع مارس بدلاً عنها. يبدو الحل بسيطاً وذلك باستخدام عبارة if واختبار الرقم وطباعة الاسم المناسب.

        int month = 10;
        
        if(month == 1){
            System.out.println("jan");
        }else if(month == 2){
            System.out.println("feb");
        }
        //....
        //إلى نهاية الأشهر

ومن الممكن أيضاً استخدام عبارة switch بدلاً عن if، ولكن هنالك حلٌ أجمل وأفضل باستخدام المصفوفات وهو كما ترى

        int month = 10;
        String months[] = {"","jan","feb","march","apr","may","jun","jul","aug","sep","oct","nov","dec"};
        System.out.println(months[month]);

نضع جميع الأشهر في مصفوفة مع وضع فراغ في الخانة رقم صفر من أجل تخطي الرقم صفر, وبعد ذلك في أي مكان تحتاجُ فيه إلى طباعة اسم الشهر ما عليك إلا استخدام اسم المصفوفة بالإضافة إلى رقم الشهر.

خاتمة

في النهاية, دوماً يسأل المبرمج نفسه، ماذا أستخدم من الأدوات التي أعرفها في لغة جافا، ويكون الاختيار وفق خبرة المبرمج في التعامل مع هذه الأدوات.

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


قد يعجبك أيضا

لماذا لغة جافا آمنة؟ كائن واحد يقدم جل المزايات الأمنية و الحماية لبرامج جافا

لماذا لغة جافا آمنة؟ كائن واحد يقدم جل المزايات الأمنية و الحماية لبرامج جافا
ما رأيك؟ اترك تعليقاً أدناه


  1. اكتب برنامج بلغة جافا لقراءة 5 اعداد وتخزينها في مصفوفة احادية ثم اطبع هذه الاعداد كل عدد في سطر ومقابل كل رقم يكون نجوم stars مساوي لذلك العدد كما في يلي:

    Number stars

    5 * * * * *

    3 * * *

    7 * * * * * * *

    4 * * * *

    1 *

    ممكن مساعدة بحل هاي المسالة بلغة جافا

  2. السلام عليكم, ماهي المصادر اللتي ستفيدني وتطور جانبي في البرمجة مع العلم انني اعتبر مبتدئ في هذا المجال واريد احترافه ماهي المصادر
    .؟ اتمنى الرد السريع .

  3. السلام عليكم
    عندى سؤال ازاى اطلع اكبر قيم فى شكل مصفوفة
    المصفوفة (10 60 90 50 5 3 )
    اطلع القيم الى اكبر من 50
    ازاى اقدر اعملها

    1. انا عايز اعمل array لحفظ الحروف الابجديه كلها بالترتيب مع اختصار الكود على قدر المستطاع

{"email":"البريد الالكتروني غير صحيح","url":"رابط الموقع غير صحيح","required":"بعض الحقول المطلوبة لم تتم تعبئتها"}

نجاح!

تنبيه!

خطأ!