과제 작업을 수행하는 동안 솔루션 검토

완료됨

다음 예제에서는 코드 블록을 적어도 한 번 이상 실행해야 하므로 do를 사용해야 합니다. while을 사용하여 동일한 결과를 얻을 수도 있습니다. 일부 개발자는 while의 논리를 통해 코드를 더 쉽게 읽을 수 있다고 생각합니다. 이 경우 while을 구현하도록 선택할 수 있습니다. 이 경우 대부분의 코드 컴파일러는 반복 문을 do-while(으)로 변환하여 코드를 최적화합니다.

프로젝트 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();

프로젝트 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();

프로젝트 3 코드

다음 코드는 이전 단원의 과제 프로젝트 3에 사용 가능한 솔루션 중 하나입니다.

코드에서는 ‘foreach 반복 변수’에 할당된 값을 수정할 수 없으므로 외부 루프에 for 문을 사용합니다. 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);
}

성공했다면 축하합니다! 문제가 있는 경우 시간을 내어 솔루션을 검토하고 작동 방식을 이해해 보세요.