مراجعة الحل الذي يجب القيام به مقابل نشاط التحدي

مكتمل

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

رمز Project 1

التعليمات البرمجية التالية هي أحد الحلول الممكنة لتحدي المشروع 1 من الوحدة السابقة.

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

string? readResult;
string valueEntered = "";
int numValue = 0;
bool validNumber = false;

Console.WriteLine("Enter an integer value between 5 and 10");

do
{
    readResult = Console.ReadLine();
    if (readResult != null) 
    {
        valueEntered = readResult;
    }

    validNumber = int.TryParse(valueEntered, out numValue);

    if (validNumber == true)
    {
        if (numValue <= 5 || numValue >= 10)
        {
            validNumber = false;
            Console.WriteLine($"You entered {numValue}. Please enter a number between 5 and 10.");
        }
    }
    else 
    {
        Console.WriteLine("Sorry, you entered an invalid number, please try again");
    }
} while (validNumber == false);

Console.WriteLine($"Your input value ({numValue}) has been accepted.");

readResult = Console.ReadLine();

التعليمات البرمجية ل Project 2

التعليمات البرمجية التالية هي أحد الحلول الممكنة لتحدي المشروع 2 من الوحدة السابقة.

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

string? readResult;
string roleName = "";
bool validEntry = false;

do
{                
    Console.WriteLine("Enter your role name (Administrator, Manager, or User)");
    readResult = Console.ReadLine();
    if (readResult != null) 
    {
        roleName = readResult.Trim();
    }

    if (roleName.ToLower() == "administrator" || roleName.ToLower() == "manager" || roleName.ToLower() == "user") 
    {
        validEntry = true;
    }
    else
    {
        Console.Write($"The role name that you entered, \"{roleName}\" is not valid. ");
    }

} while (validEntry == false);

Console.WriteLine($"Your input value ({roleName}) has been accepted.");
readResult = Console.ReadLine();

التعليمات البرمجية ل Project 3

التعليمات البرمجية التالية هي أحد الحلول الممكنة لتحدي المشروع 3 من الوحدة السابقة.

تستخدم التعليمات البرمجية عبارة for للحلقة الخارجية لأنه لا يمكنك تعديل القيمة المعينة إلى "متغير تكرار foreach". يمكنك حل هذه المشكلة عن طريق الإعلان عن متغير سلسلة إضافي داخل الحلقة foreach ، ولكن بعد ذلك سوف تضيف تعقيد غير مرغوب فيه إلى منطق التعليمات البرمجية. بمعنى آخر، سيؤدي استخدام عبارة foreach (string myString in myStrings) التكرار ثم محاولة معالجة myString المتغير إلى إنشاء خطأ في التحويل البرمجي.

تستخدم التعليمات البرمجية عبارة while للحلقة الداخلية لأنه، اعتمادا على قيمة سلسلة البيانات، قد لا يتم تنفيذ كتلة التعليمات البرمجية (عندما لا تحتوي السلسلة على فترة). يجب عدم استخدام عبارة do في الحالات التي قد لا تحتاج فيها كتلة التكرار إلى التنفيذ.

string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
int stringsCount = myStrings.Length;

string myString = "";
int periodLocation = 0;

for (int i = 0; i < stringsCount; i++)
{
    myString = myStrings[i];
    periodLocation = myString.IndexOf(".");

    string mySentence;

    // extract sentences from each string and display them one at a time
    while (periodLocation != -1)
    {

        // first sentence is the string value to the left of the period location
        mySentence = myString.Remove(periodLocation);

        // the remainder of myString is the string value to the right of the location
        myString = myString.Substring(periodLocation + 1);

        // remove any leading white-space from myString
        myString = myString.TrimStart();

        // update the comma location and increment the counter
        periodLocation = myString.IndexOf(".");

        Console.WriteLine(mySentence);
    }
 
    mySentence = myString.Trim();
    Console.WriteLine(mySentence);
}