Przejrzyj rozwiązanie do zadania typu 'do versus while' w ramach ćwiczenia wyzwaniowego.
W poniższych przykładach należy użyć elementu , do ponieważ wiesz, że musisz wykonać blok kodu co najmniej raz. Możesz również użyć funkcji , while aby osiągnąć ten sam wynik. Niektórzy deweloperzy uważają, że logika elementu while sprawia, że kod jest bardziej czytelny. Jeśli tak jest w twoim przypadku, możesz wybrać wdrożenie elementu while. W takim przypadku należy pamiętać, że większość kompilatorów kodu optymalizuje kod, konwertując instrukcję iteracji na element do-while.
Kod projektu 1
Poniższy kod jest jednym z możliwych rozwiązań projektu wyzwania 1 z poprzedniej lekcji.
Kod używa instrukcji do , ponieważ blok kodu musi być wykonywany co najmniej raz. Możesz również użyć funkcji , while aby osiągnąć ten sam wynik. Niektórzy deweloperzy mogą czuć, że logika elementu while sprawia, że kod jest bardziej czytelny. Jeśli tak jest, możesz zaimplementować instrukcję while tutaj.
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();
Kod projektu 2
Poniższy kod jest jednym z możliwych rozwiązań projektu wyzwania 2 z poprzedniej lekcji.
Kod używa instrukcji do , ponieważ blok kodu musi być wykonywany co najmniej raz. Możesz również użyć funkcji , while aby osiągnąć ten sam wynik. Niektórzy deweloperzy mogą czuć, że logika elementu while sprawia, że kod jest bardziej czytelny. Jeśli tak jest, możesz zaimplementować instrukcję while tutaj.
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();
Kod programu Project 3
Poniższy kod jest jednym z możliwych rozwiązań projektu wyzwania 3 z poprzedniej lekcji.
Kod używa for instrukcji dla pętli zewnętrznej, ponieważ nie można zmodyfikować wartości przypisanej do zmiennej iteracji foreach. Można obejść ten problem, deklarując dodatkową zmienną ciągu wewnątrz foreach pętli, ale wtedy do logiki kodu będzie dodawała się niepożądane złożoność. Innymi słowy, użycie instrukcji iteracyjnej foreach (string myString in myStrings) i następnie próba przetworzenia zmiennej myString powoduje błąd kompilacji.
Kod używa while instrukcji dla pętli wewnętrznej, ponieważ w zależności od wartości ciągu danych blok kodu może nie zostać wykonany (gdy ciąg nie zawiera kropki). Nie należy używać do instrukcji w sytuacjach, gdy blok iteracji może nie być wykonywany.
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);
}
Jeśli Ci się udało — gratulujemy! Jeśli masz problemy, pośmiń czas na przejrzenie rozwiązania i spróbuj zrozumieć, jak to działa.