تمرين - كتابة التعليمات البرمجية لعرض جميع بيانات صفيفAnimals

مكتمل

في هذا التمرين، يمكنك كتابة بنية التكرار الحلقي المتداخلة كتلة التعليمات البرمجية التحديد التي تستخدم لعرض معلومات صفيف ourAnimals. المهام التفصيلية التي تكملها أثناء هذا التمرين هي:

  1. الحلقة الخارجية: بناء الحلقة الخارجية التي تتكرر من خلال في صفيف ourAnimals.
  2. التحقق من البيانات: كتابة التعليمات البرمجية التي تتحقق من بيانات الأليفة الموجودة وتعرض معرف الأليفة إذا كانت البيانات موجودة لحيوان أليف.
  3. الحلقة الداخلية: إنشاء حلقة داخلية تعرض جميع خصائص الأليفة مع البيانات المعينة.
  4. اختبار التحقق: قم بإجراء اختبارات التحقق للتعليمات البرمجية التي تطورها في هذا التمرين.

هام

يجب إكمال التمرين السابق في هذه الوحدة النمطية قبل بدء هذا التمرين.

إنشاء حلقة للتكرار من خلال صفيف ourAnimals

في هذه المهمة، يمكنك إنشاء الحلقة الخارجية for المستخدمة للتكرار عبر في ourAnimals الصفيف. يمكنك فحص العلاقة بين أبعاد الصفيف ومعلمات التكرار الحلقي الخاص بك for . يمكنك أيضا مراعاة الاختلافات بين استخدام for العبارات والعبارات foreach عند العمل مع صفائف متعددة الأبعاد.

  1. تأكد من أن Visual Studio Code مفتوح وأن ملف Program.cs مرئي في المحرر.

  2. داخل كتلة التعليمات البرمجية switch(menuSelection) لبيان التحديد، حدد موقع أسطر التعليمات البرمجية التالية:

    case "1":
        // List all of our current pet information
        Console.WriteLine("this app feature is coming soon - please check back to see progress.");
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break;
    
  3. احذف العبارة Console.WriteLine() المستخدمة لعرض الرسالة "قريبا"، واترك سطر تعليمة برمجية فارغا أسفل سطر تعليق التعليمات البرمجية // List all of our current pet information .

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

    اترك الرسالة التي تقول Press the Enter key to continue.

  4. بدءا من سطر التعليمات البرمجية الفارغة التي قمت بإنشائها، ابدأ عبارة for كما يلي:

    for ()
    {
    }
    
  5. خذ دقيقة للنظر في ما تحتاج إلى تحقيقه مع هذه for العبارة.

    تذكر أن العبارة for تحتوي على ثلاثة أجزاء تتحكم في كيفية تنفيذ التكرارات: للمهيئ؛ والشرط for، و for iterator. تستند القيم المعينة إلى للمهيئوالشرطوالمكرر إلى ما تحتاج إلى تحقيقه باستخدام العبارة for .

    في هذه الحالة، يتم استخدام التكرار for الحلقي للتكرار من خلال ourAnimals الصفيف. أنت تعرف أن الصفائف صفر مفهرسة، ما يعني أنه تتم فهرسة صفيف مع n عناصر من 0 إلى n-1. تحتاج إلى للمهيئ، للشرط، و للمكرر لمطابقة أبعاد الصفيف. في هذه الحالة، تريد أن تبدأ الحلقة for عند 0، بزيادة بمقدار 1، وتنتهي عند maxPets-1.

    يتم تعريف الصفيف الخاص بك ourAnimals كما يلي: string[,] ourAnimals = new string[maxPets, 6];. أنت تعرف أن القيمة المعينة إلى maxPets هي 8. في هذا التعريف، maxPets يحدد عدد العناصر في البعد الأول من الصفيف، وليس رقم الفهرس المستند إلى الصفر الذي تستخدمه للإشارة إلى العناصر في الصفيف. لذلك، على الرغم من أن maxPets = 8، فإن أرقام فهرس الصفيف تتراوح من 0 إلى 7.

  6. لتحديد قيمة التحكم في التكرار الحلقي الخاص بك for ، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
    }
    

    كما ترى، قم بتعيين للمهيئ ليتوافق int i = 0; مع فهرس الصفيف الصفري. وبالمثل، تعيين الشرط ل إلى i < maxPets; محاذاة مع البعد الأول من الصفيف. وأخيرا، سيؤدي تعيين for iterator إلى i++ زيادة قيمة التحكم في التكرار الحلقي لكل 1 تكرار.

  7. خذ دقيقة للنظر في الاختيار بين عبارة for وعلامه foreach عند التكرار من خلال صفيف ourAnimals.

    الهدف هو التكرار من خلال كل في صفيف ourAnimals واحد في كل مرة. فلماذا لا تستخدم التكرار foreach الحلقي؟ بعد كل شيء، تعرف أن العبارة مصممة foreach للحالات التي تريد تكرارها عبر كل عنصر في صفيف من العناصر.

    السبب في عدم استخدام foreach حلقة في هذه الحالة هو أن الصفيف عبارة عن ourAnimals صفيف متعدد الأبعاد. نظرا لأن ourAnimals هو صفيف سلسلة متعدد الأبعاد، فإن كل عنصر موجود داخله ourAnimals هو عنصر منفصل من سلسلة النوع. إذا استخدمت foreach حلقة للتكرار من خلال ourAnimals، فإن يتعرف على foreach كل سلسلة كعنصر منفصل في قائمة من 48 عنصر سلسلة (8 × 6 = 48). foreach لن تعالج العبارة بعدي الصفيف بشكل منفصل. بمعنى آخر، لن تتعرف foreach الحلقة 8 على صفوف عناصر السلسلة، حيث يحتوي كل صف على عمود من 6 العناصر. بما أنك تريد العمل مع واحد في كل مرة، ومعالجة جميع الخصائص الحيوانية الستة أثناء تكرار واحد، فإن العبارة foreach ليست الخيار الصحيح.

    ومع ذلك، إذا كان ourAnimals الصفيف مصفوفة متعرجة تم تكوينها كصفيف من صفائف السلسلة، يمكنك استخدام عبارة foreach . في هذه الحالة، يمكنك إنشاء foreach لحلقة خارجية والثانية foreach لحلقة داخلية. سيتكرر التكرار الحلقي الخارجي من خلال عناصر "مصفوفة السلسلة" في الصفيف المتعرج. صفائف السلسلة هي "الصفوف" في الصفيف ثنائي الأبعاد. سيتكرر التكرار الحلقي الداخلي من خلال عناصر "السلسلة" المضمنة في صفائف السلسلة. عناصر السلسلة في صفائف السلسلة هي "الأعمدة" في الصفيف ثنائي الأبعاد.

    يوضح نموذج التعليمات البرمجية التالي نهج الصفيف المتعرج.

    string[][] jaggedArray = new string[][]
    {
        new string[] { "one1", "two1", "three1", "four1", "five1", "six1" },
        new string[] { "one2", "two2", "three2", "four2", "five2", "six2" },
        new string[] { "one3", "two3", "three3", "four3", "five3", "six3" },
        new string[] { "one4", "two4", "three4", "four4", "five4", "six4" },
        new string[] { "one5", "two5", "three5", "four5", "five5", "six5" },
        new string[] { "one6", "two6", "three6", "four6", "five6", "six6" },
        new string[] { "one7", "two7", "three7", "four7", "five7", "six7" },
        new string[] { "one8", "two8", "three8", "four8", "five8", "six8" }
    };
    
    foreach (string[] array in jaggedArray)
    {
        foreach (string value in array)
        {
            Console.WriteLine(value);
        }
        Console.WriteLine();
    }
    

    بالنسبة لتطبيق Contoso Pets، من الأسهل على الأرجح استخدام صفيف سلسلة متعدد الأبعاد والحلقات المتداخلة for بدلا من صفيف متعرج والحلقات المتداخلة foreach . الآن بعد أن رأيت كيف يعمل كل خيار، يمكنك تحديد اختيارك الخاص في مشاريع الترميز المستقبلية.

  8. في قائمة ملف Visual Studio Code، حدد Save.

  9. افتح لوحة المحطة الطرفية المتكاملة في Visual Studio Code وأدخل الأمر لإنشاء البرنامج الخاص بك.

    لفتح الوحدة الطرفية المتكاملة من طريقة عرض EXPLORER، انقر بزر الماوس الأيمن فوق Starter، ثم حدد Open in Integrated Terminal. يمكنك أيضا استخدام القائمة عرض أو محطة طرفية لفتح لوحة المحطة الطرفية المتكاملة.

    لإنشاء البرنامج، أدخل dotnet build الأمر من موجه الأوامر Terminal.

  10. إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.

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

  11. أغلق لوحة Terminal.

التحقق من وجود بيانات الأليفة والنتيجة المعروضة

في هذه المهمة، يمكنك استخدام عبارة if للعثور على كل أليف في ourAnimals الصفيف الذي تم تعيين بيانات خصائص الأليفة إليه. عند العثور على أليف مع بيانات معينة، يمكنك عرض petID. عندما لا يتم تعيين أي بيانات، لا يتم عرض أي شيء. يمكنك تشغيل التعليمات البرمجية للتحقق من أن عبارات و forif تعمل بشكل صحيح.

  1. إنشاء سطر تعليمة برمجية فارغ داخل كتلة التعليمات البرمجية لبيانك for كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. لإنشاء عبارة if تتحقق من بيانات معرف الأليفة، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. خذ دقيقة للنظر في ما يقوم هذا if البيان بتقييمه ولماذا.

    أولا، ضع في اعتبارك الجانب الأيسر من التعبير: ourAnimals[i, 0]. لاحظ أن متغير i التحكم في التكرار الحلقي يستخدم لتحديد الذي يتم فحصه. كما قد تتذكر، 0[i, 0] في يتوافق مع الخاصية petID . نظرا لأن البعد الأول من الصفيف يتوافق مع "عدد"، فإن هذا الجانب من التعبير يضمن أن التعليمات البرمجية الخاصة بك تتحقق من القيمة المعينة petID لكل في الصفيف.

    ثانيا، ضع في اعتبارك اختيار عامل المقارنة. لاحظ أنه يتم استخدام عامل التشغيل not-equal، !=. يتم تقييم التعبير على أنه true كلما كانت القيمة المعينة إلى petID، ourAnimals[i, 0]، لا تساوي القيمة المدرجة على الجانب الأيسر من المعادلة.

    ثالثا، ضع في اعتبارك القيمة الموجودة على الجانب الأيمن من المعادلة. لاحظ أنه يتم استخدام قيمة سلسلة ثابتة من "ID #: " . هذه هي القيمة الافتراضية المعينة عند petID إنشاء نموذج البيانات. عند تعيين الخصائص إلى، petID يتم تحديث القيمة، ولن تكون مساوية للقيمة الافتراضية.

    يخبرك هذا أنه سيتم تنفيذ كتلة التعليمات البرمجية للبيانات if عندما يكون للحيوان الحالي خصائص محددة.

    إشعار

    هذا مثال جيد على متى != يجب استخدامه. لا تهتم بالقيمة التي تم تعيينها إلى petID طالما أنها ليست القيمة الافتراضية.

  4. لإنشاء Console.WriteLine() أسلوب يعرض كتلة التعليمات البرمجية petIDif للبيانات الداخلية، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    

    لاحظ أنه يمكن استخدام عنصر صفيف كوسيطة عند استدعاء WriteLine() الأسلوب .

  5. في قائمة ملف Visual Studio Code، حدد Save.

  6. افتح لوحة الوحدة الطرفية المتكاملة وأدخل الأمر لإنشاء برنامجك.

  7. إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.

  8. في موجه الأوامر Terminal، أدخل الأمر لتشغيل البرنامج.

    dotnet run أدخل الأمر في موجه الأوامر Terminal لتشغيل التعليمات البرمجية للبرنامج.

    إذا كانت التعليمات البرمجية الخاصة بك تنشئ خطأ وقت التشغيل، فقم بإصلاح الأخطاء وحفظ التحديثات وإعادة تشغيل التطبيق.

  9. في موجه الأوامر Terminal، للتحقق من أن منطق التعليمات البرمجية الجديد يعمل كما هو متوقع، أدخل 1

    يجب أن تشاهد القيم التالية petID معروضة:

    ID #: d1
    ID #: d2
    ID #: c3
    ID #: c4
    Press the Enter key to continue.
    

    تتوافق هذه المعرفات مع الأليفة التي قامت بتعيين البيانات.

    إذا كانت التعليمات البرمجية الخاصة بك تعرض إخراجا مختلفا عند تحديد خيار القائمة 1، فراجع التعليمات البرمجية وتحديثها. تذكر أنك تحتاج إلى حفظ ملف Program.cs بعد إجراء التحديثات.

  10. قم بإنهاء التطبيق، ثم أغلق لوحة Terminal.

عرض جميع خصائص الأليفة مع البيانات المعينة

في هذه المهمة، يمكنك إنشاء تكرار for حلقي داخل if كتلة التعليمات البرمجية للبيانات المستخدمة لعرض جميع خصائص الأليف الحالي.

  1. في محرر التعليمات البرمجية، حدد موقع أسطر التعليمات البرمجية التالية في ملف Program.cs الخاص بك:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. لإنشاء التكرار for الحلقي الذي سيتكرر من خلال خصائص كل أليف، قم بتحديث التعليمات البرمجية الخاصة بك على النحو التالي:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
            }
        }
    }    
    

    لاحظ أن لديك الآن حلقة ثانية for "متداخلة" داخل كتلة التعليمات البرمجية للحلقة الأولى for . كما تعلمون، التكرار الحلقي الخارجي يتكرر عبر في ourAnimals الصفيف. الهدف هو تكرار الحلقة الداخلية من خلال خصائص كل. وبما أن البيانات الحيوانية مخزنة في صفيف متعدد الأبعاد، سيكون من السهل الوصول إلى الخصائص الحيوانية.

  3. خذ دقيقة لمراجعة العبارة for التي أدخلتها.

    لاحظ أن متغير التحكم في التكرار الحلقي يسمى j. عند تداخل for الحلقات، يكون أحد النهج التقليدية هو استخدام i في الحلقة الخارجية وفي j الحلقة الداخلية. إن اتباع اصطلاحات مثل هذه يسهل على الآخرين قراءة التعليمات البرمجية الخاصة بك.

    نظرا لأنه يتم تخزين ست خصائص لكل، فإن للمهيئ هو int j = 0;وحالة هيj < 6;. يتطابق هذا المزيج من المهيئ والحالة مع نطاق فهرس الصفيف الذي تحتاجه، 0 - 5.

  4. لعرض كل خاصية لحيوان أليف على سطر منفصل، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    
  5. خذ دقيقة للنظر في البنية المتداخلة التي قمت بإنشائها والإخراج المعروض الذي ستنتجه التعليمات البرمجية الخاصة بك.

    لاحظ أن القيمة المكتوبة إلى وحدة التحكم، ourAnimals[i, j]، تستخدم متغيرات التحكم في التكرار الحلقي من كل من الحلقات الخارجية والداخلية for .

    تعرف كل عنصر من العناصر التالية:

    • يتوافق البعد الأول من ourAnimals الصفيف مع الأليفة المختلفة.
    • يتوافق البعد الثاني من ourAnimals الصفيف مع خصائص كل أليف.
    • if تمنع العبارة تشغيل الحلقة الداخلية عندما لا تكون هناك بيانات أليفة معينة إلى الأليف الحالي.
    • تكمل الحلقة الداخلية جميع تكراراتها لكل تكرار للحلقة الخارجية.

    لذلك، أنت تعرف أن خصائص كل سيتم عرضها على النحو المنشود.

  6. لاستبدال رسالة petID فارغة WriteLine()، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine();
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    

    يسهل هذا التحديث النهائي رؤية الفصل بين الأليفة عند عرض الإخراج إلى وحدة التحكم.

  7. في قائمة ملف Visual Studio Code، حدد Save.

  8. افتح جزء Terminal وأنشئ البرنامج.

  9. إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.

راجع عملك

في هذه المهمة، يمكنك تشغيل التطبيق الخاص بك من الوحدة الطرفية المتكاملة والتحقق من أن تركيبتك المتداخلة من for العبارات و if تنتج النتيجة المتوقعة.

  1. إذا لزم الأمر، افتح لوحة المحطة الطرفية المتكاملة في Visual Studio Code.

  2. في موجه الأوامر Terminal، أدخل dotnet run

  3. في موجه الأوامر Terminal، أدخل 1

  4. تحقق من عرض بيانات الأليفة للحيوانات الأليفة الأربعة التي تم تعيين بيانات لها.

    ID #: d1
    Species: dog
    Age: 2
    Nickname: lola
    Physical description: medium sized cream colored female golden retriever weighing about 65 pounds. housebroken.
    Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.
    
    ID #: d2
    Species: dog
    Age: 9
    Nickname: loki
    Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken.
    Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs.
    
    ID #: c3
    Species: cat
    Age: 1
    Nickname: Puss
    Physical description: small white female weighing about 8 pounds. litter box trained.
    Personality: friendly
    
    ID #: c4
    Species: cat
    Age: ?
    Nickname:
    Physical description:
    Personality:
    Press the Enter key to continue.
    

    إشعار

    إذا لم تظهر النتائج المتوقعة، فتأكد من حفظ ملف Program.cs المحدث. إذا كنت لا ترى النتائج المتوقعة ولا يمكنك تحديد المشكلة، يمكنك فحص التعليمات البرمجية Program.cs في المجلد النهائي. يتم تضمين المجلد النهائي كجزء من التنزيل الذي أكملته أثناء الإعداد. نوصي بقضاء بعض الوقت في محاولة تحديد مشكلة بناء الجملة والمنطق وإصلاحها في التعليمات البرمجية قبل التحقق من ملف Program.cs في المجلد النهائي.

  5. قم بإنهاء التطبيق، ثم أغلق لوحة Terminal.