Cvičení – dokončení aktivity výzvy k rozlišení mezi příkazy iterace a iterací
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, nebowhileiteraci.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.
- Vaše řešení musí použít
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.
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:
V nabídce Soubor vyberte Otevřít složku.
Pomocí dialogového okna Otevřít složku přejděte na složku CsharpProjects a otevřete ji.
Na panelu Průzkumník editoru Visual Studio Code vyberte Program.cs.
V nabídce Výběru editoru Visual Studio Code vyberte Vybrat vše a stiskněte klávesu Delete.
Napište kód, který implementuje každou podmínku pro projekt kódu 1.
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, nebowhileiteraci.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.
- Vaše řešení musí použít
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.
Zakomentujte veškerý kód na panelu Editor editoru sady Visual Studio
- Výběr všech řádků kódu v editoru kódu
- V nabídce Upravit vyberte Přepnout blokový komentář.
Napište kód, který implementuje každou podmínku pro projekt kódu 2.
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ší
foreachneboforsmyč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ázevmyString.Ve vnější smyčce musí vaše řešení použít
IndexOf()metoduStringtřídy k získání umístění prvního znaku tečkymyStringv 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-whilenebowhilesmyčku, která se dá použít ke zpracovánímyStringpromě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()aTrimStart()metody ke zpracování informací o řetězci.
Zakomentujte veškerý kód na panelu Editor editoru sady Visual Studio
- Výběr všech řádků kódu v editoru kódu
- V nabídce Upravit vyberte Přepnout blokový komentář.
Napište kód, který implementuje každou podmínku uvedenou pro projekt kódu 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.