تمرين - إنشاء منطق قرار متداخل مع if و else if و else
في الوحدة السابقة، استخدمت عبارات متعددة if لتنفيذ قواعد اللعبة. ومع ذلك، في نهاية الوحدة، لاحظت أن هناك حاجة إلى عبارات أكثر تعبيرا if لإصلاح خطأ دقيق في التعليمات البرمجية الخاصة بك.
في هذا التمرين، ستستخدم ifعبارات elseو و else if لتحسين خيارات التفريع في التعليمات البرمجية وإصلاح خطأ منطقي.
استخدام عبارات if و else بدلا من عبارات if منفصلة
بدلا من إجراء فحصين لعرض الرسالة "أنت تربح!" أو "عذرا، ستفقد"، ستستخدم else الكلمة الأساسية .
تأكد من أن التعليمات البرمجية Program.cs تطابق ما يلي:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }هذه هي التعليمات البرمجية التي أكملتها في الوحدة السابقة.
خذ دقيقة لفحص العبارات
ifفي نهاية الملف:if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }لاحظ أن كلا
ifالعبارات تقارنtotalبنفس القيمة الرقمية. هذه هي الفرصة المثالية لاستخدام بيانelse.تحديث العبارتين
ifكما يلي:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }هنا، إذا كانت
total >= 15خاطئة، تنفيذ كتلة التعليمات البرمجيةelseالتي تتبع الكلمة الأساسية. نظرا لأن الحصيلتين متقابلتان مرتبطتان، فهذا سيناريو مثالي للكلمةelseالأساسية.يجب أن يحتوي ملف Program.cs المحدث على التعليمات البرمجية التالية:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }
تعديل التعليمات البرمجية لإزالة مكافأة التكديس للزوج والثلاثي باستخدام التداخل
في الوحدة السابقة، رأيت أنه تم إدخال خطأ منطق دقيق في التطبيق الخاص بك. يمكنك إصلاح هذه المشكلة عن طريق تضمين عباراتك if .
يسمح لك التداخل بوضع كتل التعليمات البرمجية داخل كتل التعليمات البرمجية. في هذه الحالة، سوف تتداخل مع if و else (التحقق من مزدوج) داخل بيان آخر if (التحقق من ثلاثة أضعاف) لمنع منح كلا العلاوات.
قم بتعديل التعليمات البرمجية الخاصة بك لمطابقة سرد التعليمات البرمجية التالية:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } } if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }خذ دقيقة لمراجعة العبارات المتداخلة
if.والهدف من ذلك هو إنشاء بناء داخلي
if-elseحيث تكون النقطتان متناقضتين مرتبطتين، ثم استخدام النتائج المتعارضة (إذا/صحيح وغير ذلك/خطأ) لمنح نقاط المكافأة للثلاثي والزوجي. لتحقيق هذا الهدف، يمكنك التحقق من تضاعف في العبارة الخارجيةif، ثم للثلاثي في العبارة الداخليةif. يضمن هذا النمط أنه عندما يرجع الفحص الداخلي للثلاثيfalse،elseيمكن أن تمنح كتلة التعليمات البرمجية نقاطا للزوج.القادمة، سوف "تعليمات برمجية صعبة" نتائج لفات الثلاث الخاصة بك من أجل اختبار منطق التعليمات البرمجية الخاصة بك.
إنشاء سطر تعليمة برمجية فارغ أعلى السطر حيث
totalيتم الإعلان عنه وتهيئته.لاختبار لفة من الازدواج، أدخل التعليمات البرمجية التالية:
roll1 = 6; roll2 = 6; roll3 = 5;يمكنك الترميز الثابت للمتغيرات الثلاثة
rollمن اختبار التعليمات البرمجية دون الحاجة إلى تشغيل التطبيق عشرات المرات.في قائمة Visual Studio Code File ، انقر فوق Save.
في طريقة عرض EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.
يجب فتح لوحة Terminal، ويجب أن تتضمن موجه أوامر يظهر أن Terminal مفتوحة لموقع مجلد TestProject.
في موجه الأوامر Terminal، لتشغيل التعليمات البرمجية، اكتب dotnet run ثم اضغط على Enter.
عند تشغيل التعليمات البرمجية الخاصة بك، يجب أن ترى:
Dice roll: 6 + 6 + 5 = 17 You rolled doubles! +2 bonus to total! You win!لاختبار لفة من الثلاثيات، قم بتحديث متغيرات لفة ذات التعليمات البرمجية المضمنة كما يلي:
roll1 = 6; roll2 = 6; roll3 = 6;في قائمة Visual Studio Code File ، انقر فوق Save.
في طريقة عرض EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.
في موجه الأوامر Terminal، لتشغيل التعليمات البرمجية، اكتب dotnet run ثم اضغط على Enter.
عند تشغيل التعليمات البرمجية الخاصة بك، يجب أن ترى:
Dice roll: 6 + 6 + 6 = 18 You rolled triples! +6 bonus to total! You win!
استخدم عبارات if, else, and else if لمنح جائزة بدلا من رسالة win-lost
لجعل اللعبة أكثر متعة، يمكنك تغيير اللعبة من "الفوز أو الخسارة" إلى منح جوائز وهمية لكل نتيجة. يمكنك تقديم أربع جوائز. ومع ذلك، يجب أن يفوز اللاعب بجائزة واحدة فقط:
- إذا سجل اللاعب ما يساوي 16 أو أكثر، فسيربح سيارة جديدة.
- إذا سجل اللاعب ما يساوي 10 أو أكثر، فسيربح جهاز كمبيوتر محمولاً جديدًا.
- إذا سجل اللاعب 7 بالضبط، فسيربح رحلة.
- بخلاف ذلك، سيربح اللاعب قطة صغيرة.
قم بتعديل التعليمات البرمجية من الخطوات السابقة إلى سرد التعليمات البرمجية التالية:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } Console.WriteLine($"Your total including the bonus: {total}"); } if (total >= 16) { Console.WriteLine("You win a new car!"); } else if (total >= 10) { Console.WriteLine("You win a new laptop!"); } else if (total == 7) { Console.WriteLine("You win a trip for two!"); } else { Console.WriteLine("You win a kitten!"); }خذ دقيقة لمراجعة البنية المحدثة
if-elseif-else.تسمح لك العبارة
ifوelse ifوelseبإنشاء شروط خاصة متعددة كتعبيرات منطقية. بمعنى آخر، عندما تريد أن تحدث نتيجة واحدة فقط، ولكن لديك العديد من الشروط والنتائج المحتملة، استخدم أكبر عدد تريده منelse ifالعبارات. إذا لم تنطبق أي من عباراتifوelse if، فسيتم تنفيذ كتلة التعليمة البرمجيةelseالنهائية.elseهو اختياري، ولكن يجب أن يأتي الأخير إذا اخترت تضمينه.استخدم تقنية الترميز
rollالثابت للمتغيرات مؤقتا لاختبار كل رسالة.
خلاصة
- يتيح لك الجمع بين
ifعبارات وelseاختبار شرط واحد، ثم تنفيذ إحدى نتيجتين. سيتم تشغيل كتلة التعليمات البرمجيةifل عندما يكون التعبير المنطقي هوtrue، وسيتم تشغيل كتلة التعليمات البرمجية لelseعندما يكون التعبير المنطقي هوfalse. - يمكنك تضمين عبارات
ifلتحديد شرط محتمل. ومع ذلك، يجب أن تنظر في استخدام العبارات ifوelse ifوelseبدلاً من ذلك. - استخدم
else ifعبارات لإنشاء شروط حصرية متعددة. -
elseاختياري، ولكن يجب أن يأتي دائما آخر عند تضمينه.