تمرين - كتابة التعليمات البرمجية لعرض جميع بيانات صفيفAnimals
في هذا التمرين، يمكنك كتابة بنية التكرار الحلقي المتداخلة كتلة التعليمات البرمجية التحديد التي تستخدم لعرض معلومات صفيف ourAnimals. المهام التفصيلية التي تكملها أثناء هذا التمرين هي:
- الحلقة الخارجية: بناء الحلقة الخارجية التي تتكرر من خلال في صفيف ourAnimals.
- التحقق من البيانات: كتابة التعليمات البرمجية التي تتحقق من بيانات الأليفة الموجودة وتعرض معرف الأليفة إذا كانت البيانات موجودة لحيوان أليف.
- الحلقة الداخلية: إنشاء حلقة داخلية تعرض جميع خصائص الأليفة مع البيانات المعينة.
- اختبار التحقق: قم بإجراء اختبارات التحقق للتعليمات البرمجية التي تطورها في هذا التمرين.
هام
يجب إكمال التمرين السابق في هذه الوحدة النمطية قبل بدء هذا التمرين.
إنشاء حلقة للتكرار من خلال صفيف ourAnimals
في هذه المهمة، يمكنك إنشاء الحلقة الخارجية for المستخدمة للتكرار عبر في ourAnimals الصفيف. يمكنك فحص العلاقة بين أبعاد الصفيف ومعلمات التكرار الحلقي الخاص بك for . يمكنك أيضا مراعاة الاختلافات بين استخدام for العبارات والعبارات foreach عند العمل مع صفائف متعددة الأبعاد.
تأكد من أن Visual Studio Code مفتوح وأن ملف Program.cs مرئي في المحرر.
داخل كتلة التعليمات البرمجية
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;احذف العبارة
Console.WriteLine()المستخدمة لعرض الرسالة "قريبا"، واترك سطر تعليمة برمجية فارغا أسفل سطر تعليق التعليمات البرمجية// List all of our current pet information.لن تكون هناك حاجة إلى رسالة الملاحظات لأنك ستعرض محتويات
ourAnimalsالصفيف. أثناء تطوير التعليمات البرمجية المطابقة لتحديدات القوائم الأخرى، سيتم تحديث رسائل الملاحظات هذه أيضا.اترك الرسالة التي تقول
Press the Enter key to continue.بدءا من سطر التعليمات البرمجية الفارغة التي قمت بإنشائها، ابدأ عبارة
forكما يلي:for () { }خذ دقيقة للنظر في ما تحتاج إلى تحقيقه مع هذه
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.لتحديد قيمة التحكم في التكرار الحلقي الخاص بك
for، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:for (int i = 0; i < maxPets; i++) { }كما ترى، قم بتعيين للمهيئ ليتوافق
int i = 0;مع فهرس الصفيف الصفري. وبالمثل، تعيين الشرط ل إلىi < maxPets;محاذاة مع البعد الأول من الصفيف. وأخيرا، سيؤدي تعيين for iterator إلىi++زيادة قيمة التحكم في التكرار الحلقي لكل1تكرار.خذ دقيقة للنظر في الاختيار بين عبارة
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. الآن بعد أن رأيت كيف يعمل كل خيار، يمكنك تحديد اختيارك الخاص في مشاريع الترميز المستقبلية.في قائمة ملف Visual Studio Code، حدد Save.
افتح لوحة المحطة الطرفية المتكاملة في Visual Studio Code وأدخل الأمر لإنشاء البرنامج الخاص بك.
لفتح الوحدة الطرفية المتكاملة من طريقة عرض EXPLORER، انقر بزر الماوس الأيمن فوق Starter، ثم حدد Open in Integrated Terminal. يمكنك أيضا استخدام القائمة عرض أو محطة طرفية لفتح لوحة المحطة الطرفية المتكاملة.
لإنشاء البرنامج، أدخل
dotnet buildالأمر من موجه الأوامر Terminal.إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.
تذكر أن رسالة الخطأ والتحذير الخاصة بالبناء تخبرك عن المشكلة وأين يمكنك العثور عليها. عند حل المشكلات، من الأفضل البدء بالمشكلات التي تحدث بالقرب من أعلى التعليمات البرمجية الخاصة بك والعمل لأسفل.
أغلق لوحة Terminal.
التحقق من وجود بيانات الأليفة والنتيجة المعروضة
في هذه المهمة، يمكنك استخدام عبارة if للعثور على كل أليف في ourAnimals الصفيف الذي تم تعيين بيانات خصائص الأليفة إليه. عند العثور على أليف مع بيانات معينة، يمكنك عرض petID. عندما لا يتم تعيين أي بيانات، لا يتم عرض أي شيء. يمكنك تشغيل التعليمات البرمجية للتحقق من أن عبارات و forif تعمل بشكل صحيح.
إنشاء سطر تعليمة برمجية فارغ داخل كتلة التعليمات البرمجية لبيانك
forكما يلي:for (int i = 0; i < maxPets; i++) { }لإنشاء عبارة
ifتتحقق من بيانات معرف الأليفة، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { } }خذ دقيقة للنظر في ما يقوم هذا
ifالبيان بتقييمه ولماذا.أولا، ضع في اعتبارك الجانب الأيسر من التعبير:
ourAnimals[i, 0]. لاحظ أن متغيرiالتحكم في التكرار الحلقي يستخدم لتحديد الذي يتم فحصه. كما قد تتذكر،0[i, 0]في يتوافق مع الخاصيةpetID. نظرا لأن البعد الأول من الصفيف يتوافق مع "عدد"، فإن هذا الجانب من التعبير يضمن أن التعليمات البرمجية الخاصة بك تتحقق من القيمة المعينةpetIDلكل في الصفيف.ثانيا، ضع في اعتبارك اختيار عامل المقارنة. لاحظ أنه يتم استخدام عامل التشغيل not-equal،
!=. يتم تقييم التعبير على أنهtrueكلما كانت القيمة المعينة إلى petID،ourAnimals[i, 0]، لا تساوي القيمة المدرجة على الجانب الأيسر من المعادلة.ثالثا، ضع في اعتبارك القيمة الموجودة على الجانب الأيمن من المعادلة. لاحظ أنه يتم استخدام قيمة سلسلة ثابتة من
"ID #: ". هذه هي القيمة الافتراضية المعينة عندpetIDإنشاء نموذج البيانات. عند تعيين الخصائص إلى،petIDيتم تحديث القيمة، ولن تكون مساوية للقيمة الافتراضية.يخبرك هذا أنه سيتم تنفيذ كتلة التعليمات البرمجية للبيانات
ifعندما يكون للحيوان الحالي خصائص محددة.إشعار
هذا مثال جيد على متى
!=يجب استخدامه. لا تهتم بالقيمة التي تم تعيينها إلىpetIDطالما أنها ليست القيمة الافتراضية.لإنشاء
Console.WriteLine()أسلوب يعرض كتلة التعليمات البرمجيةpetIDifللبيانات الداخلية، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }لاحظ أنه يمكن استخدام عنصر صفيف كوسيطة عند استدعاء
WriteLine()الأسلوب .في قائمة ملف Visual Studio Code، حدد Save.
افتح لوحة الوحدة الطرفية المتكاملة وأدخل الأمر لإنشاء برنامجك.
إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.
في موجه الأوامر Terminal، أدخل الأمر لتشغيل البرنامج.
dotnet runأدخل الأمر في موجه الأوامر Terminal لتشغيل التعليمات البرمجية للبرنامج.إذا كانت التعليمات البرمجية الخاصة بك تنشئ خطأ وقت التشغيل، فقم بإصلاح الأخطاء وحفظ التحديثات وإعادة تشغيل التطبيق.
في موجه الأوامر Terminal، للتحقق من أن منطق التعليمات البرمجية الجديد يعمل كما هو متوقع، أدخل 1
يجب أن تشاهد القيم التالية
petIDمعروضة:ID #: d1 ID #: d2 ID #: c3 ID #: c4 Press the Enter key to continue.تتوافق هذه المعرفات مع الأليفة التي قامت بتعيين البيانات.
إذا كانت التعليمات البرمجية الخاصة بك تعرض إخراجا مختلفا عند تحديد خيار القائمة 1، فراجع التعليمات البرمجية وتحديثها. تذكر أنك تحتاج إلى حفظ ملف Program.cs بعد إجراء التحديثات.
قم بإنهاء التطبيق، ثم أغلق لوحة Terminal.
عرض جميع خصائص الأليفة مع البيانات المعينة
في هذه المهمة، يمكنك إنشاء تكرار for حلقي داخل if كتلة التعليمات البرمجية للبيانات المستخدمة لعرض جميع خصائص الأليف الحالي.
في محرر التعليمات البرمجية، حدد موقع أسطر التعليمات البرمجية التالية في ملف Program.cs الخاص بك:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }لإنشاء التكرار
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الصفيف. الهدف هو تكرار الحلقة الداخلية من خلال خصائص كل. وبما أن البيانات الحيوانية مخزنة في صفيف متعدد الأبعاد، سيكون من السهل الوصول إلى الخصائص الحيوانية.خذ دقيقة لمراجعة العبارة
forالتي أدخلتها.لاحظ أن متغير التحكم في التكرار الحلقي يسمى
j. عند تداخلforالحلقات، يكون أحد النهج التقليدية هو استخدامiفي الحلقة الخارجية وفيjالحلقة الداخلية. إن اتباع اصطلاحات مثل هذه يسهل على الآخرين قراءة التعليمات البرمجية الخاصة بك.نظرا لأنه يتم تخزين ست خصائص لكل، فإن للمهيئ هو
int j = 0;وحالة هيj < 6;. يتطابق هذا المزيج من المهيئ والحالة مع نطاق فهرس الصفيف الذي تحتاجه،0-5.لعرض كل خاصية لحيوان أليف على سطر منفصل، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:
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]); } } }خذ دقيقة للنظر في البنية المتداخلة التي قمت بإنشائها والإخراج المعروض الذي ستنتجه التعليمات البرمجية الخاصة بك.
لاحظ أن القيمة المكتوبة إلى وحدة التحكم،
ourAnimals[i, j]، تستخدم متغيرات التحكم في التكرار الحلقي من كل من الحلقات الخارجية والداخليةfor.تعرف كل عنصر من العناصر التالية:
- يتوافق البعد الأول من
ourAnimalsالصفيف مع الأليفة المختلفة. - يتوافق البعد الثاني من
ourAnimalsالصفيف مع خصائص كل أليف. -
ifتمنع العبارة تشغيل الحلقة الداخلية عندما لا تكون هناك بيانات أليفة معينة إلى الأليف الحالي. - تكمل الحلقة الداخلية جميع تكراراتها لكل تكرار للحلقة الخارجية.
لذلك، أنت تعرف أن خصائص كل سيتم عرضها على النحو المنشود.
- يتوافق البعد الأول من
لاستبدال رسالة 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]); } } }يسهل هذا التحديث النهائي رؤية الفصل بين الأليفة عند عرض الإخراج إلى وحدة التحكم.
في قائمة ملف Visual Studio Code، حدد Save.
افتح جزء Terminal وأنشئ البرنامج.
إصلاح أي أخطاء في الإنشاء أو تحذيرات تراها تم الإبلاغ عنها قبل المتابعة.
راجع عملك
في هذه المهمة، يمكنك تشغيل التطبيق الخاص بك من الوحدة الطرفية المتكاملة والتحقق من أن تركيبتك المتداخلة من for العبارات و if تنتج النتيجة المتوقعة.
إذا لزم الأمر، افتح لوحة المحطة الطرفية المتكاملة في Visual Studio Code.
في موجه الأوامر Terminal، أدخل dotnet run
في موجه الأوامر Terminal، أدخل 1
تحقق من عرض بيانات الأليفة للحيوانات الأليفة الأربعة التي تم تعيين بيانات لها.
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 في المجلد النهائي.
قم بإنهاء التطبيق، ثم أغلق لوحة Terminal.