Oefening: een uitdagingsactiviteit voltooien om onderscheid te maken tussen taak- en while-iteratie-instructies

Voltooid

Code-uitdagingen versterken wat u hebt geleerd en helpen u vertrouwen te krijgen voordat u verdergaat.

Het verschil tussen iteraties van de do- en while-instructie bekijken

Zoals u hebt gezien, ondersteunt C# vier typen iteratie-instructies: for, foreach, do-whileen while. In de taalreferentiedocumentatie van Microsoft worden deze instructies als volgt beschreven:

  • De for instructie: voert de hoofdtekst uit terwijl een opgegeven Boole-expressie (de 'voorwaarde') waar oplevert.
  • De foreach instructie: inventariseert de elementen van een verzameling en voert de hoofdtekst uit voor elk element van de verzameling.
  • De do-while instructie: voert de hoofdtekst een of meer keren voorwaardelijk uit.
  • De while instructie: voert de hoofdtekst nul of meer keren voorwaardelijk uit.

De for en foreach iteraties lijken duidelijk van elkaar te onderscheiden en van de do-while en while iteraties. De definities voor de do-while en while instructies lijken echter behoorlijk vergelijkbaar te zijn. Weten wanneer u moet kiezen tussen een do-while en een while willekeuriger, en kan zelfs een beetje verwarrend zijn. Sommige uitdagingsprojecten kunnen helpen om de verschillen duidelijk te maken.

In deze uitdaging krijgt u voorwaarden te zien voor drie afzonderlijke coderingsprojecten. Voor elk project moet u een iteratiecodeblok implementeren met behulp van een do-while of een while instructie. U moet de opgegeven voorwaarden evalueren om te kiezen tussen de en do-while instructieswhile. U kunt schakelen nadat u begint als uw eerste keuze niet goed werkt en u had gehoopt.

Notitie

De voorwaarden voor uw codeerproject kunnen worden gebruikt om u te helpen kiezen tussen de do-while en while instructies. Wat u weet of niet weet, over de Boole-expressie die wordt geëvalueerd, kan u soms helpen om tussen de do-while en while instructies te selecteren. In deze uitdagingsoefening bevatten de projectvoorwaarden informatie die wordt gebruikt om de Boole-expressie samen te stellen.

Gebruikersinvoer beheren tijdens deze uitdaging

Wanneer u een Console.ReadLine() instructie gebruikt om gebruikersinvoer te verkrijgen, is het gebruikelijk om een tekenreeks met een null-type (aangewezen string?) te gebruiken voor de invoervariabele en vervolgens de waarde te evalueren die door de gebruiker is ingevoerd. In het volgende codevoorbeeld wordt een tekenreeks van een null-type gebruikt om gebruikersinvoer vast te leggen. De iteratie wordt voortgezet terwijl de door de gebruiker opgegeven waarde null is:

string? readResult;
Console.WriteLine("Enter a string:");
do
{
    readResult = Console.ReadLine();
} while (readResult == null);

De Boole-expressie die door de while instructie wordt geëvalueerd, kan worden gebruikt om ervoor te zorgen dat gebruikersinvoer voldoet aan een opgegeven vereiste. Als de gebruiker bijvoorbeeld wordt gevraagd een tekenreeks in te voeren die ten minste drie tekens bevat, kan de volgende code worden gebruikt:

string? readResult;
bool validEntry = false;
Console.WriteLine("Enter a string containing at least three characters:");
do
{
    readResult = Console.ReadLine();
    if (readResult != null)
    {
        if (readResult.Length >= 3)
        {
            validEntry = true;
        }
        else
        {
            Console.WriteLine("Your input is invalid, please try again.");
        }
    }
} while (validEntry == false);

Als u invoer voor numerieke waarden wilt gebruiken Console.ReadLine() , moet u de tekenreekswaarde converteren naar een numeriek type.

De int.TryParse() methode kan worden gebruikt om een tekenreekswaarde te converteren naar een geheel getal. De methode maakt gebruik van twee parameters, een tekenreeks die wordt geëvalueerd en de naam van een geheel getalvariabele waaraan een waarde wordt toegewezen. De methode retourneert een Booleaanse waarde. Het volgende codevoorbeeld demonstreert met behulp van de int.TryParse() methode:

// capture user input in a string variable named readResult

int numericValue = 0;
bool validNumber = false;

validNumber = int.TryParse(readResult, out numericValue);

Als de tekenreekswaarde die is toegewezen aan readResult een geldig geheel getal vertegenwoordigt, wordt de waarde toegewezen aan de variabele geheel getal met de naam numericValueen true wordt deze toegewezen aan de Booleaanse variabele met de naam validNumber. Als de waarde waaraan is toegewezen readResult geen geldig geheel getal vertegenwoordigt, validNumber wordt er een waarde van falsetoegewezen. Als de waarde bijvoorbeeld readResult gelijk is aan '7', wordt de waarde 7 toegewezen aan numericValue.

Codeproject 1: code schrijven waarmee gehele getallen worden gevalideerd

Hier volgen de voorwaarden die uw eerste coderingsproject moet implementeren:

  • Uw oplossing moet een do-while of while iteratie bevatten.

  • Vóór het iteratieblok: uw oplossing moet een Console.WriteLine() instructie gebruiken om de gebruiker te vragen om een geheel getal tussen 5 en 10.

  • Binnen het iteratieblok:

    • Uw oplossing moet een Console.ReadLine() instructie gebruiken om invoer van de gebruiker te verkrijgen.
    • Uw oplossing moet ervoor zorgen dat de invoer een geldige weergave is van een geheel getal.
    • Als de waarde van het gehele getal niet tussen 5 en 10 ligt, moet uw code een Console.WriteLine() instructie gebruiken om de gebruiker te vragen om een geheel getal tussen 5 en 10.
    • Uw oplossing moet ervoor zorgen dat de gehele waarde tussen 5 en 10 ligt voordat de iteratie wordt afgesloten.
  • Hieronder (na) het iteratiecodeblok: uw oplossing moet een Console.WriteLine() instructie gebruiken om de gebruiker te informeren dat de invoerwaarde is geaccepteerd.

  1. Zorg ervoor dat u een leeg Program.cs bestand hebt geopend in Visual Studio Code.

    Open Zo nodig Visual Studio Code en voer vervolgens de volgende stappen uit om een Program.cs-bestand voor te bereiden in de editor:

    1. Selecteer Map openen in het menu Bestand.

    2. Gebruik het dialoogvenster Map openen om naar de map CsharpProjects te navigeren en vervolgens te openen.

    3. Selecteer Program.cs in het deelvenster Visual Studio Code EXPLORER.

    4. Selecteer Alles selecteren in het menu Selectie van Visual Studio Code en druk vervolgens op Delete.

  2. Schrijf de code waarmee elke voorwaarde voor codeproject 1 wordt geïmplementeerd.

  3. Voer uw toepassing uit en controleer of uw code gebruikersinvoer valideert op basis van de opgegeven vereisten.

    Wanneer u bijvoorbeeld uw toepassing uitvoert, moeten invoerwaarden, zoals 'twee' en '2', worden geweigerd, maar moet deze een invoerwaarde van '7' accepteren.

    In het bovenstaande voorbeeld ziet de console-uitvoer er ongeveer als volgt uit:

    Enter an integer value between 5 and 10
    two
    Sorry, you entered an invalid number, please try again
    2
    You entered 2. Please enter a number between 5 and 10.
    7
    Your input value (7) has been accepted.
    

Codeproject 2: code schrijven waarmee tekenreeksinvoer wordt gevalideerd

Hier volgen de voorwaarden die uw tweede coderingsproject moet implementeren:

  • Uw oplossing moet een do-while of while iteratie bevatten.

  • Voor het iteratieblok: uw oplossing moet een Console.WriteLine() instructie gebruiken om de gebruiker te vragen om een van de drie rolnamen: Beheerder, Manager of Gebruiker.

  • Binnen het iteratieblok:

    • Uw oplossing moet een Console.ReadLine() instructie gebruiken om invoer van de gebruiker te verkrijgen.
    • Uw oplossing moet ervoor zorgen dat de ingevoerde waarde overeenkomt met een van de drie rolopties.
    • Uw oplossing moet de Trim() methode voor de invoerwaarde gebruiken om voorloop- en volgspaties te negeren.
    • Uw oplossing moet de ToLower() methode voor de invoerwaarde gebruiken om hoofdletters en kleine letters te negeren.
    • Als de ingevoerde waarde niet overeenkomt met een van de rolopties, moet uw code een Console.WriteLine() instructie gebruiken om de gebruiker om een geldig item te vragen.
  • Hieronder (na) het iteratiecodeblok: Uw oplossing moet een Console.WriteLine() instructie gebruiken om de gebruiker te informeren dat de invoerwaarde is geaccepteerd.

  1. Markeer alle code in het deelvenster Visual Studio Code Editor als commentaar

    1. Alle coderegels in de code-editor selecteren
    2. In het menu Bewerken, selecteer Blokcommentaar aan/uit zetten.
  2. Schrijf de code waarmee elke voorwaarde voor codeproject 2 wordt geïmplementeerd.

  3. Voer uw toepassing uit en controleer of uw code gebruikersinvoer valideert op basis van de opgegeven vereisten.

    Wanneer u bijvoorbeeld uw toepassing uitvoert, moet deze een invoerwaarde weigeren, zoals 'Beheerder', maar moet deze een invoerwaarde van 'administrator' accepteren.

    De console-uitvoer voor dit voorbeeld moet er ongeveer als volgt uitzien:

    Enter your role name (Administrator, Manager, or User)
    Admin
    The role name that you entered, "Admin" is not valid. Enter your role name (Administrator, Manager, or User)
       Administrator
    Your input value (Administrator) has been accepted.
    

Codeproject 3: code schrijven die de inhoud van een tekenreeksmatrix verwerkt

Hier volgen de voorwaarden die uw derde coderingsproject moet implementeren:

  • uw oplossing moet de volgende tekenreeksmatrix gebruiken om de invoer voor uw coderingslogica weer te geven:

    string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
    
  • Uw oplossing moet een geheel getalvariabele declareren met de naam periodLocation die kan worden gebruikt om de locatie van het puntteken binnen een tekenreeks te bewaren.

  • Uw oplossing moet een buitenste foreach of for lus bevatten die kan worden gebruikt om elk tekenreekselement in de matrix te verwerken. De tekenreeksvariabele die u in de lussen gaat verwerken, moet de naam myStringhebben.

  • In de buitenste lus moet uw oplossing de IndexOf() methode van de String klasse gebruiken om de locatie van het eerste puntteken in de myString variabele op te halen. De methode-aanroep moet vergelijkbaar zijn met: myString.IndexOf("."). Als er geen puntteken in de tekenreeks staat, wordt een waarde van -1 geretourneerd.

  • Uw oplossing moet een binnenste do-while of while lus bevatten die kan worden gebruikt om de myString variabele te verwerken.

  • In de binnenste lus moet uw oplossing elke zin extraheren en weergeven (schrijven naar de console) die is opgenomen in elk van de tekenreeksen die worden verwerkt.

  • In de binnenste lus mag de oplossing het puntteken niet weergeven.

  • In de binnenste lus moet uw oplossing de Remove(), Substring()en TrimStart() methoden gebruiken om de tekenreeksinformatie te verwerken.

  1. Markeer alle code in het deelvenster Visual Studio Code Editor als commentaar

    1. Alle coderegels in de code-editor selecteren
    2. In het menu Bewerken, selecteer Blokcommentaar aan/uit zetten.
  2. Schrijf de code waarmee elke voorwaarde wordt geïmplementeerd die wordt vermeld voor codeproject 3.

  3. Voer uw toepassing uit en controleer of uw uitvoer voldoet aan de vereisten.

    Als uw codelogica correct werkt, ziet de uitvoer er ongeveer als volgt uit:

    I like pizza
    I like roast chicken
    I like salad
    I like all three of the menu choices
    

Of u nu vastloopt en een kijkje moet nemen in de oplossing of als u klaar bent, gaat u verder met het bekijken van de oplossingsprojecten voor deze uitdaging.