Cvičení – vytvořte opakování pomocí smyček do a while
- 10 min
Na první pohled jsou příkazy do-while a while dalším iterovacím příkazem, který vám umožňuje procházet blokem kódu a tím měnit tok jeho provádění. Jakmile ale prozkoumáme, jak jednotlivé fungují, můžeme lépe identifikovat drobné odlišnosti každého příkazu iterace a kdy je použít.
Co je příkaz do-while?
Příkaz do-while spustí příkaz nebo blok příkazů, zatímco zadaný logický výraz se vyhodnotí jako true. Vzhledem k tomu, že se tento výraz vyhodnotí po každém spuštění smyčky, spustí se smyčka do-while jednou nebo vícekrát.
do
{
// This code executes at least one time
} while (true);
Tok provádění začíná uvnitř složené závorky. Kód se spustí alespoň jednou a pak se vyhodnotí logický výraz vedle klíčového while slova. Pokud logický výraz vrátí true, blok kódu se znovu spustí.
Pevným kódováním logického výrazu na true jsme vytvořili nekonečnou smyčku – smyčku, která nikdy nekončí, alespoň ne tak, jak je nyní napsaná. Potřebovali bychom způsob, jak přerušit smyčku uvnitř bloku kódu. Brzy probereme kritéria ukončení do-while.
Dobře, teď připravíme naše programovací prostředí a zahájíme zkoumání ukázek kódu, které implementují do-while příkaz.
Příprava programovacího prostředí
Tento modul obsahuje praktické aktivity, které vás provedou procesem sestavování a spouštění ukázkového kódu. Doporučujeme, abyste tyto aktivity dokončili pomocí editoru Visual Studio Code jako vývojového prostředí. Používání editoru Visual Studio Code pro tyto aktivity vám pomůže stát se pohodlnějším psaním a spouštěním kódu ve vývojářském prostředí, které používají profesionálové po celém světě.
Otevřete Visual Studio Code.
K otevření editoru Visual Studio Code můžete použít nabídku Start systému Windows (nebo odpovídající prostředek pro jiný operační systém).
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku přejděte do složky Windows Desktop.
Pokud máte jiné umístění složky, kde uchováváte projekty kódu, můžete místo toho použít toto umístění složky. Pro toto školení je důležité mít umístění, které je snadné najít a zapamatovat.
V dialogovém okně Otevřít složku vyberte Vybrat složku.
Pokud se zobrazí dialogové okno zabezpečení s dotazem, jestli autorům důvěřujete, vyberte Ano.
V nabídce Terminálu editoru Visual Studio Code vyberte Nový terminál.
Všimněte si, že příkazový řádek na panelu Terminálu zobrazuje cestu ke složce pro aktuální složku. Například:
C:\Users\someuser\Desktop>Poznámka:
Pokud pracujete na vlastním počítači místo v sandboxu nebo hostovaném prostředí a dokončili jste další moduly Microsoft Learn v této řadě C#, možná jste už vytvořili složku projektu pro ukázky kódu. V takovém případě můžete přeskočit další krok, který se používá k vytvoření konzolové aplikace ve složce TestProject.
Na příkazovém řádku terminálu vytvořte novou konzolovou aplikaci v zadané složce, zadejte následující řádek:
dotnet new console -o ./CsharpProjects/TestProjectTento příkaz rozhraní příkazového řádku .NET používá šablonu programu .NET k vytvoření nového projektu konzolové aplikace jazyka C# v zadaném umístění složky. Příkaz pro vás vytvoří složky CsharpProjects a TestProject a jako název souboru
.csprojpoužije TestProject.Pokud se zobrazí zpráva s oznámením, že soubory už existují, pokračujte dalším postupem. Znovu použijete existující soubory projektu.
V zobrazení PRŮZKUMNÍK rozbalte složku CsharpProjects .
Měla by se zobrazit složka TestProject a dva soubory, programový soubor jazyka C# s názvem Program.cs a soubor projektu C# s názvem TestProject.csproj.
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku vyberte složku CsharpProjects a pak vyberte Vybrat složku.
V zobrazení PRŮZKUMNÍK rozbalte složku TestProject a pak vyberte Program.cs.
Odstraňte existující řádky kódu.
Tento projekt konzoly C# použijete k vytváření, sestavování a spouštění ukázek kódu během tohoto modulu.
Zavřete panel Terminálu.
Napsání příkazu do-while, který se má přerušit, když se vygeneruje určité náhodné číslo
Pojďme napsat kód, který bude generovat náhodná čísla mezi 1 a 10, dokud nevygenerujeme číslo 7. Může to trvat jen jednu iteraci, abyste získali 7, nebo to může trvat desítky iterací.
Ujistěte se, že máte visual Studio Code otevřený a Program.cs zobrazený na panelu Editor.
Poznámka:
Program.cs by měl být prázdný. Pokud není, vyberte a odstraňte všechny řádky kódu.
Do editoru visual studio Code zadejte následující kód.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
Soubor Program.cs musí být uložen před sestavením nebo spuštěním kódu.
Na panelu PRŮZKUMNÍK otevřete terminál v umístění složky TestProject, klikněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.
Otevře se panel terminálu. Terminál by měl obsahovat příkazový řádek naznačující, že terminál je otevřený ve složce TestProject.
Na příkazovém řádku terminálu spusťte kód zadáním příkazu dotnet run a stiskněte Enter.
Poznámka:
Pokud se zobrazí zpráva "Nepodařilo se najít projekt ke spuštění", ujistěte se, že příkazový řádek terminálu zobrazí očekávané umístění složky TestProject. Příklad:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Zkontrolujte výstup.
Vzhledem k tomu, že generovaná čísla jsou náhodná, budou se výsledky lišit. Hodnota
7však bude posledním číslem, které se vytiskne, protože logický výraz se vyhodnotí jakofalse, když se vygeneruje 7, a tok provádění ukončí blok kódu.2 5 8 2 7Věnujte chvíli kontrole svého kódu.
Klíčovým poznatkem pro tento první úkol je, že blok kódu smyčky
do-whilese spustí alespoň jednou. Může to iterovat velký početkrát a je nepravděpodobné, že bychom předem věděli, kolik iterací bude.Je také důležité si všimnout, že kód uvnitř bloku kódu má vliv na to, jestli pokračovat v iterování prostřednictvím bloku kódu, nebo ne. Blok kódu, který ovlivňuje kritéria ukončení, je primárním důvodem výběru
do-whilenebowhilepříkazů, nikoli jednoho z ostatních příkazů iterace. Oba,foreachifor, závisí při určování počtu iterací bloku kódu na faktorech, které jsou externí vůči bloku kódu.
Napište příkaz while, který iteruje pouze v době, kdy je náhodné číslo větší než určitá hodnota.
Nyní se podíváme na while příkaz.
Pomocí editoru visual Studio Code aktualizujte kód následujícím způsobem:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");Poznámka:
V tomto případě umístíme
whileklíčové slovo a logický výraz před blok kódu. Tím se změní význam kódu a působí jako "brána", která umožní tok provádění vstoupit pouze tehdy, pokud se Booleovský výraz vyhodnotí jako pravda.Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód.
Zadáním
dotnet runz příkazového řádku terminálu spusťte kód.Zkontrolujte uvedené výstupní hodnoty.
Vzhledem k tomu, že jsou čísla náhodná, váš kód vytvoří jinou sekvenci.
9 7 5 Last number: 1Věnujte chvíli kontrole svého kódu.
V horním kódu použijeme
randomk inicializaci našíintproměnné s názvemcurrent. Náš další aktivní řádek kódu je nášwhilepříkaz.Náš
whilepříkaz bude iterovat na základě logického výrazu(current >= 3). Nevíme, k jaké hodnotě se přiřadícurrent, ale existují možnosti, které ovlivňují našiwhilesmyčku:- Pokud je
currentinicializována na hodnotu větší nebo rovnou3, booleovský výraz vrátítrue, a tok provádění vstoupí do bloku kódu. V bloku kódu je první věcí, kterou uděláme, napsat hodnotucurrentdo konzoly. Dále, stále uvnitř bloku kódu, aktualizujeme hodnotucurrents novou náhodnou hodnotou. V tomto okamžiku se řízení vrátí zpět na začátek příkazuwhile, kde je vyhodnocen Booleovský výraz. Tento proces pokračuje, dokud logický výraz nevrátífalsea tok provádění se přeruší z bloku kódu. - Pokud je
currentinicializován (v horní části kódu) na hodnotu menší než3, logický výraz vrátífalsea blok kódu se nikdy nespustí.
Poslední řádek kódu zapíše hodnotu
currentdo konzoly. Tento kód se spustí bez ohledu na to, jestli se spustil blok kódu iterace, a je naší šancí napsat konečnou hodnotucurrentdo konzoly.- Pokud je
Použijte příkaz continue pro přímý skok k booleovskému výrazu
V některých případech chceme zkrátit zbývající část kódu v bloku kódu a pokračovat k další iteraci. Můžeme to udělat pomocí continue příkazu.
Pomocí editoru visual Studio Code aktualizujte kód následujícím způsobem:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */Věnujte chvíli kontrole svého kódu.
Všimněte si, že jsme se vrátili na
do-while. Zajištěnído-whilezajistí, že smyčka bude iterovat alespoň jednou.První věc, kterou uděláme uvnitř bloku kódu, je přiřadit novou náhodnou hodnotu .
currentDále zkontrolujeme, jestlicurrentje větší než nebo rovno8. Pokud tento výraz vrátítrue,continueklíčové slovo přenese řízení na konec bloku kódu awhilevyhodnotí(current != 7). Smyčka tedy bude pokračovat v iteraci, dokud hodnotacurrentnebude rovna7.Klíčem k tomuto kroku cvičení je řádek kódu obsahující
continueklíčové slovo:if (current >= 8) continue;Vzhledem k tomu, že náš kód, který zapíše hodnotu
currentdo konzoly, je umístěn zaif (current >= 8) continue;, náš kód zajistí, že hodnotacurrent, která je větší nebo rovna8, nebude nikdy zapsána do výstupního okna.Pojďme to vyzkoušet.
Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód.
Zadáním
dotnet runz příkazového řádku terminálu spusťte kód.Zkontrolujte uvedené výstupní hodnoty.
5 1 6 7Pravděpodobně uvidíte jiné výsledky, než jaké se zobrazí níže. Ve výstupním okně se však nezobrazí žádné hodnoty
8nebo vyšší, dokud kód neskončí hodnotou7.Zvažte rozdíl mezi příkazy
continueabreak.Jak jste viděli v tomto posledním kroku,
continuepříkaz přenese provádění na konec aktuální iterace. Toto chování se liší od chování, které jsme viděli s příkazembreak. Příkazbreakukončí iteraci (neboswitch) a přenese řízení na příkaz, který následuje za ukončeným příkazem. Pokud po ukončení příkazu neexistuje žádný příkaz, řízení se přenese na konec souboru nebo metody.
Rekapitulace
Z této lekce byste měli vzít několik důležitých nápadů:
- Příkaz
do-whilealespoň jednou iteruje přes blok kódu a může dále pokračovat v iteracích na základě logického výrazu. Vyhodnocení logického výrazu obvykle závisí na určité hodnotě vygenerované nebo načtené uvnitř bloku kódu. - Příkaz
whilenejprve vyhodnotí logický výraz a pokračuje iterací bloku kódu, pokud se logický výraz vyhodnotí jakotrue. - Klíčové
continueslovo pro okamžitý přechod k logickému výrazu.