Cvičení – dokončení aktivity výzvy k rozlišení mezi příkazy iterace a iterací

Dokončeno

Výzvy kódu posílí to, co jste se naučili, a pomůžou vám získat jistotu, než budete pokračovat dál.

Prozkoumání rozdílu mezi iteracemi příkazů do a while

Jak jste viděli, jazyk C# podporuje čtyři typy příkazů iterace: for, foreach, do-whilea while. Referenční dokumentace k jazyku společnosti Microsoft popisuje následující příkazy:

  • Příkaz for : spustí jeho tělo, zatímco zadaný logický výraz (podmínka) se vyhodnotí jako true.
  • Příkaz foreach : vytvoří výčet prvků kolekce a spustí jeho tělo pro každý prvek kolekce.
  • Příkaz do-while : Podmíněně provede jeho tělo jednou nebo vícekrát.
  • Příkaz while : Podmíněně provede jeho tělo nulou nebo vícekrát.

Zdá for se, že iterace foreach jsou jasně odlišné od sebe a od do-while iterací a while iterací. Zdá se však, že definice pro příkazy do-while a while příkazy jsou poměrně podobné. Znalost, kdy si vybrat mezi a do-while a zdá se while , že je libovolnější, a může být dokonce trochu matoucí. Některé projekty s výzvami můžou pomoct jasně určit rozdíly.

V této výzvě se zobrazí podmínky pro tři samostatné projekty kódování. Každý projekt bude vyžadovat implementaci bloku kódu iterace pomocí do-while příkazu nebo příkazu while . Abyste si mohli vybrat mezi do-while příkazy, while budete muset vyhodnotit zadané podmínky. Po spuštění můžete přepnout, pokud vaše první volba nefunguje, stejně jako jste doufali.

Poznámka:

Podmínky pro kódovací projekt můžete použít k výběru mezi příkazy do-while a while příkazy. Co víte nebo nevíte, o logickém výrazu, který se vyhodnotí, vám může někdy pomoct vybrat mezi příkazy do-while a while příkazy. V tomto cvičení výzvy zahrnují podmínky projektu informace, které se použijí k vytvoření logického výrazu.

Správa uživatelských vstupů během této výzvy

Při použití Console.ReadLine() příkazu k získání uživatelského vstupu je běžné použít řetězec typu nullable (určený string?) pro vstupní proměnnou a pak vyhodnotit hodnotu zadaná uživatelem. Následující ukázka kódu používá řetězec typu nullable k zachycení vstupu uživatele. Iterace pokračuje, zatímco hodnota zadaná uživatelem má hodnotu null:

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

Logický výraz vyhodnocený příkazem while lze použít k zajištění toho, aby vstup uživatele splňoval zadaný požadavek. Pokud například výzva vyzve uživatele, aby zadal řetězec, který obsahuje aspoň tři znaky, můžete použít následující kód:

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);

Pokud chcete použít Console.ReadLine() vstup pro číselné hodnoty, musíte převést řetězcovou hodnotu na číselný typ.

Metodu int.TryParse() lze použít k převodu řetězcové hodnoty na celé číslo. Metoda používá dva parametry, řetězec, který se vyhodnotí, a název celočíselné proměnné, která bude přiřazena hodnotu. Metoda vrátí logickou hodnotu. Následující ukázka kódu ukazuje použití int.TryParse() metody:

// capture user input in a string variable named readResult

int numericValue = 0;
bool validNumber = false;

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

Pokud řetězcová hodnota přiřazená readResult představuje platné celé číslo, bude tato hodnota přiřazena k celočíselné proměnné s názvem numericValuea true bude přiřazena logické proměnné s názvem validNumber. Pokud hodnota přiřazená readResult nepředstavuje platné celé číslo, validNumber přiřadí se hodnota false. Pokud readResult je například rovna hodnotě "7", bude tato hodnota 7 přiřazena numericValue.

Projekt kódu 1 – napsání kódu, který ověřuje celočíselné vstupy

Tady jsou podmínky, které musí váš první projekt kódování implementovat:

  • Vaše řešení musí obsahovat buď iteraci do-while , nebo while iteraci.

  • Před blokem iterace: Vaše řešení musí použít Console.WriteLine() příkaz, který uživatele vyzve k zadání celočíselné hodnoty v rozsahu 5 až 10.

  • Uvnitř bloku iterace:

    • Vaše řešení musí použít Console.ReadLine() příkaz k získání vstupu od uživatele.
    • Vaše řešení musí zajistit, aby vstup byl platným vyjádřením celého čísla.
    • Pokud celočíselná hodnota není v rozsahu 5 až 10, musí váš kód použít Console.WriteLine() příkaz, který uživatele vyzve k zadání celočíselné hodnoty mezi 5 a 10.
    • Řešení musí před ukončením iterace zajistit, aby celočíselná hodnota byla v rozmezí 5 až 10.
  • Níže (po) bloku kódu iterace: Vaše řešení musí použít Console.WriteLine() příkaz k informování uživatele, že jeho vstupní hodnota byla přijata.

  1. Ujistěte se, že máte v editoru Visual Studio Code otevřený prázdný soubor Program.cs.

    V případě potřeby otevřete Visual Studio Code a pak následujícím postupem připravte soubor Program.cs v Editoru:

    1. V nabídce Soubor vyberte Otevřít složku.

    2. Pomocí dialogového okna Otevřít složku přejděte na složku CsharpProjects a otevřete ji.

    3. Na panelu Průzkumník editoru Visual Studio Code vyberte Program.cs.

    4. V nabídce Výběru editoru Visual Studio Code vyberte Vybrat vše a stiskněte klávesu Delete.

  2. Napište kód, který implementuje každou podmínku pro projekt kódu 1.

  3. Spusťte aplikaci a ověřte, že kód ověřuje vstup uživatele na základě zadaných požadavků.

    Když například spustíte aplikaci, měla by odmítnout vstupní hodnoty, například "dva" a "2", ale měla by přijmout vstupní hodnotu 7.

    Výše popsaný příklad by měl výstup konzoly vypadat nějak takto:

    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.
    

Projekt kódu 2 – napsání kódu, který ověřuje vstup řetězce

Tady jsou podmínky, které musí váš druhý projekt kódování implementovat:

  • Vaše řešení musí obsahovat buď iteraci do-while , nebo while iteraci.

  • Před blokem iterace: Vaše řešení musí použít Console.WriteLine() příkaz, který uživatele vyzve k zadání jednoho ze tří názvů rolí: Správce, Správce nebo Uživatel.

  • Uvnitř bloku iterace:

    • Vaše řešení musí použít Console.ReadLine() příkaz k získání vstupu od uživatele.
    • Vaše řešení musí zajistit, aby zadaná hodnota odpovídala jedné ze tří možností role.
    • Vaše řešení by mělo použít metodu Trim() na vstupní hodnotě k ignorování počátečních a koncových znaků mezery.
    • Vaše řešení by mělo použít metodu ToLower() pro vstupní hodnotu k ignorování případu.
    • Pokud zadaná hodnota neodpovídá některé z možností role, musí váš kód použít Console.WriteLine() příkaz, který uživatele vyzve k zadání platné položky.
  • Níže (po) bloku kódu iterace: Vaše řešení musí použít Console.WriteLine() příkaz k informování uživatele, že jeho vstupní hodnota byla přijata.

  1. Zakomentujte veškerý kód na panelu Editor editoru sady Visual Studio

    1. Výběr všech řádků kódu v editoru kódu
    2. V nabídce Upravit vyberte Přepnout blokový komentář.
  2. Napište kód, který implementuje každou podmínku pro projekt kódu 2.

  3. Spusťte aplikaci a ověřte, že kód ověřuje vstup uživatele na základě zadaných požadavků.

    Když například spustíte aplikaci, měla by odmítnout vstupní hodnotu, například Admin, ale měla by přijmout vstupní hodnotu správce.

    Výstup konzoly pro tento příklad by měl vypadat nějak takto:

    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.
    

Projekt kódu 3 – Napsání kódu, který zpracovává obsah pole řetězců

Tady jsou podmínky, které musí váš třetí projekt kódování implementovat:

  • Vaše řešení musí použít následující řetězcové pole, které představuje vstup do logiky kódování:

    string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
    
  • Vaše řešení musí deklarovat celočíselnou proměnnou s názvem periodLocation , která se dá použít k uložení umístění znaku tečky v řetězci.

  • Vaše řešení musí obsahovat vnější foreach nebo for smyčku, která se dá použít ke zpracování každého prvku řetězce v poli. Řetězcová proměnná, kterou budete zpracovávat uvnitř smyček, by měla mít název myString.

  • Ve vnější smyčce musí vaše řešení použít IndexOf() metodu String třídy k získání umístění prvního znaku tečky myString v proměnné. Volání metody by mělo být podobné: myString.IndexOf("."). Pokud v řetězci není žádný znak tečky, vrátí se hodnota -1.

  • Vaše řešení musí obsahovat vnitřní do-while nebo while smyčku, která se dá použít ke zpracování myString proměnné.

  • Ve vnitřní smyčce musí vaše řešení extrahovat a zobrazit (zapisovat do konzoly) každou větu obsaženou v každém z zpracovávaných řetězců.

  • Ve vnitřní smyčce nesmí vaše řešení zobrazovat znak tečky.

  • Ve vnitřní smyčce musí vaše řešení použít Remove(), Substring()a TrimStart() metody ke zpracování informací o řetězci.

  1. Zakomentujte veškerý kód na panelu Editor editoru sady Visual Studio

    1. Výběr všech řádků kódu v editoru kódu
    2. V nabídce Upravit vyberte Přepnout blokový komentář.
  2. Napište kód, který implementuje každou podmínku uvedenou pro projekt kódu 3.

  3. Spusťte aplikaci a ověřte, že výstup splňuje požadavky.

    Pokud logika kódu funguje správně, měl by výstup vypadat nějak takto:

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

Ať už se zaseknete a potřebujete se podívat na řešení nebo úspěšně dokončit, pokračujte v zobrazení projektů řešení pro tuto výzvu.