Øvelse – opret do, og mens gentagelsesløkker
- 10 minutter
På overfladen er sætningerne do-while og while endnu en gentagelsessætning, der giver dig mulighed for at gentage gennem en kodeblok og dermed ændre flowet for udførelsen af din kode. Når vi først har undersøgt, hvordan hver enkelt fungerer, kan vi dog bedre identificere nuancerne i hver gentagelsessætning, og hvornår du skal bruge dem.
Hvad er do-while-sætningen?
Sætningen do-while udfører en sætning eller en sætningsblok, mens et angivet boolesk udtryk evalueres til true. Da dette udtryk evalueres efter hver udførelse af løkken, udføres en do-while-løkke en eller flere gange.
do
{
// This code executes at least one time
} while (true);
Udførelsesflowet starter inde i krøllet klammeparentes. Koden udføres mindst én gang, hvorefter det booleske udtryk ud for nøgleordet while evalueres. Hvis det booleske udtryk returnerer true, udføres kodeblokken igen.
Ved at kode det booleske udtryk hårdt til truehar vi oprettet en uendelig løkke – en løkke, der i det mindste aldrig slutter, i hvert fald ikke som den er skrevet i øjeblikket. Vi skal bruge en måde at bryde ud af løkken inde i kodeblokken. Vi diskuterer afslutningskriterierne for en do-while om lidt.
Okay, lad os nu forberede vores kodemiljø og begynde vores undersøgelse af kodeeksempler, der implementerer en do-while sætning.
Forbered dit kodemiljø
Dette modul indeholder praktiske aktiviteter, der guider dig gennem processen med at bygge og køre demonstrationskode. Vi opfordrer dig til at fuldføre disse aktiviteter ved hjælp af Visual Studio Code som dit udviklingsmiljø. Brug af Visual Studio Code til disse aktiviteter hjælper dig med at blive mere fortrolig med at skrive og køre kode i et udviklermiljø, der bruges af fagfolk over hele verden.
Åbn Visual Studio Code.
Du kan bruge Menuen Start i Windows (eller en tilsvarende ressource for et andet operativsystem) til at åbne Visual Studio Code.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
Gå til mappen Windows Desktop i dialogboksen Åbn mappe .
Hvis du har en anden mappeplacering, hvor du gemmer kodeprojekter, kan du i stedet bruge denne mappeplacering. Til denne træning er det vigtigt at have en placering, der er nem at finde og huske.
Vælg Vælg mappe i dialogboksen Åbn mappe.
Hvis du får vist en sikkerhedsdialogboks, hvor du bliver spurgt, om du har tillid til forfatterne, skal du vælge Ja.
Vælg Ny terminal i menuen Visual Studio Code Terminal.
Bemærk, at mappestien for den aktuelle mappe vises i en kommandoprompt i terminalpanelet. For eksempel:
C:\Users\someuser\Desktop>Seddel
Hvis du arbejder på din egen pc i stedet for i en sandkasse eller et hostet miljø, og du har fuldført andre Microsoft Learn-moduler i denne C#-serie, har du måske allerede oprettet en projektmappe til kodeeksempler. Hvis det er tilfældet, kan du springe over næste trin, som bruges til at oprette en konsolapp i mappen TestProject.
Angiv følgende prompt ved kommandoprompten Terminal for at oprette et nyt konsolprogram i en angivet mappe:
dotnet new console -o ./CsharpProjects/TestProjectDenne .NET CLI-kommando bruger en .NET-programskabelon til at oprette et nyt C#-konsolprogramprojekt på den angivne mappeplacering. Kommandoen opretter mapperne CsharpProjects og TestProject for dig og bruger TestProject som navnet på filen
.csproj.Hvis der vises en meddelelse om, at filerne allerede findes, skal du fortsætte med de næste trin. Du skal genbruge de eksisterende projektfiler.
Udvid mappen CsharpProjects i STIFINDER-visningen.
Du bør kunne se mappen TestProject og to filer, en C#-programfil med navnet Program.cs og en C#-projektfil med navnet TestProject.csproj.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
I dialogboksen Åbn mappe skal du vælge mappen CsharpProjects og derefter vælge Vælg mappe.
Udvid mappen TestProject i visningen STIFINDER, og vælg derefter Program.cs.
Slet de eksisterende kodelinjer.
Du skal bruge dette C#-konsolprojekt til at oprette, bygge og køre kodeeksempler under dette modul.
Luk terminalpanelet.
Skriv en do-while-sætning, der skal afbrydes, når der genereres et bestemt tilfældigt tal
Lad os skrive kode, der fortsætter med at generere tilfældige tal mellem 1 og 10, indtil vi genererer tallet 7. Det kan tage kun én gentagelse at få en 7, eller det kan tage snesevis af gentagelser.
Sørg for, at Visual Studio Code er åben, og at Program.cs vises i editorpanelet.
Seddel
Program.cs skal være tomt. Hvis ikke, skal du vælge og slette alle kodelinjer.
Skriv følgende kode i Visual Studio Code Editor.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);Vælg Gemi menuen Visual Studio Code File .
Den Program.cs fil skal gemmes, før du kan oprette eller køre koden.
Højreklik på TestProjecti panelet EXPLORER for at åbne en Terminal på mappen TestProject, og vælg derefter Åbn i integreret terminal.
Der åbnes et terminalpanel. Terminalen skal indeholde en kommandoprompt, der viser, at Terminal er åben for din TestProject-mappeplacering.
I kommandoprompten Terminal skal du skrive dotnet run og derefter trykke på Enter for at køre din kode.
Seddel
Hvis du får vist en meddelelse med teksten "Et projekt, der ikke kan køres", skal du kontrollere, at terminalkommandoprompten viser den forventede placering af mappen TestProject. Eksempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Gennemse dit output.
Da de genererede tal er tilfældige, vil dine resultater være forskellige. Værdien
7vil dog være det sidste tal, der skal udskrives, da det booleske udtryk evalueres tilfalse, når 7 genereres, og kørselsflowet afslutter kodeblokken.2 5 8 2 7Brug et øjeblik på at gennemse din kode.
En vigtig læring for denne første opgave er, at kodeblokken i en
do-whileløkke udføres mindst én gang. Det kunne gentage et stort antal gange, og det er usandsynligt, at vi i forvejen ved, hvor mange gentagelser der vil være.Det er også vigtigt at bemærke, at koden i kodeblokken påvirker, om du vil fortsætte med at gentage gennem kodeblokken eller ej. En kodeblok, der påvirker afslutningskriterierne, er en primær årsag til at vælge en
do-whileellerwhile-sætninger i stedet for et af de andre gentagelsessætninger.foreachBåde ogforer afhængige af faktorer, der er uden for kodeblokken, for at bestemme antallet af kodeblok-gentagelser.
Skriv en while-sætning, der kun gentages, mens et tilfældigt tal er større end en værdi
Lad os se på while erklæringen.
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
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}");Seddel
I dette tilfælde placerer vi nøgleordet
whileog det booleske udtryk før kodeblokken. Dette ændrer betydningen af koden og fungerer som en "port", så det kun er muligt at angive udførelsesflowet, hvis det booleske udtryk evalueres til sand.Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode.
Angiv
dotnet runfra Terminal-kommandoprompten for at køre din kode.Gennemse de viste outputværdier.
Da tallene er tilfældige, giver din kode en anden sekvens.
9 7 5 Last number: 1Brug et øjeblik på at gennemse din kode.
I den øverste kode bruger
randomvi til at initialisere variablenintmed navnetcurrent. Vores næste aktive kodelinje er voreswhileerklæring.Vores
whilesætning gentages baseret på det booleske udtryk(current >= 3). Vi ved ikke, hvilken værdi der tildeles tilcurrent, men der er muligheder, der påvirker voreswhileløkke:- Hvis
currentinitialiseres til en værdi, der er større end eller lig med3, returnerertruedet booleske udtryk , og kørselsflowet angiver kodeblokken. I kodeblokken er det første, vi gør, at skrive værdien afcurrenttil konsollen. Derefter opdaterer vi værdien afcurrentmed en ny tilfældig værdi, stadig inden for kodeblokken. På dette tidspunkt går kontrolelementet tilbage til toppen af sætningenwhile, hvor det booleske udtryk evalueres. Denne proces fortsætter, indtil det booleske udtryk returnerer, og kørselsflowet afbrydesfalsefra kodeblokken. - Hvis
currentinitialiseres (øverst i vores kode) til en værdi, der er mindre end3, returnererfalsedet booleske udtryk , og kodeblokken udføres aldrig.
Den endelige kodelinje skriver værdien af
currenttil konsollen. Denne kode kører, uanset om iterationskodeblokken blev udført eller ej, og det er vores chance for at skrive den endelige værdi afcurrenttil konsollen.- Hvis
Brug continue-sætningen til at gå direkte til det booleske udtryk
I visse tilfælde vil vi kortslutte resten af koden i kodeblokken og fortsætte til næste gentagelse. Det kan vi gøre ved hjælp af sætningen continue .
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
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}"); */Brug et øjeblik på at gennemse din kode.
Bemærk, at vi har skiftet tilbage til en
do-while. Ado-whilesikrer, at løkken gentages mindst én gang.Den første ting, vi gør i kodeblokken, er at tildele en ny tilfældig værdi til
current. Derefter kontrollerer vi, omcurrenter større end eller lig med8. Hvis dette udtryk returnerertrue,continueoverføres kontrolelementet til slutningen af kodeblokken, ogwhileevalueres(current != 7). Så løkken fortsætter med at gentage, så længe værdien afcurrentikke er lig med7.Nøglen til dette trin i øvelsen er den kodelinje, der indeholder nøgleordet
continue:if (current >= 8) continue;Da vores kode, der skriver værdien af
currenttil konsollen, er placeret efterif (current >= 8) continue;, sikrer vores kode, at en værdi afcurrent, der er større end eller lig med8, aldrig skrives til outputvinduet.Lad os prøve det.
Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode.
Angiv
dotnet runfra Terminal-kommandoprompten for at køre din kode.Gennemse de viste outputværdier.
5 1 6 7Du får sandsynligvis vist andre resultater end det, der vises nedenfor. Du kan dog ikke se nogen værdier
8eller nyere i outputvinduet, før udførelsen af koden slutter med værdien7.Overvej forskellen mellem sætningerne
continueogbreak.Som du så i dette sidste trin, overføres udførelsen af sætningen
continuetil slutningen af den aktuelle gentagelse. Denne funktionsmåde er anderledes end den funktionsmåde, vi så med sætningenbreak. Sætningenbreakafslutter gentagelsen (ellerswitch) og overfører kontrollen til den sætning, der følger efter den afsluttede sætning. Hvis der ikke er nogen sætning efter den afsluttede sætning, skal du kontrollere overførsler til slutningen af filen eller metoden.
Resumé
Der er et par vigtige idéer, du bør tage fra dette undermodul:
- Sætningen
do-whilegentager sig gennem en kodeblok mindst én gang og kan fortsætte med at gentage baseret på et boolesk udtryk. Evalueringen af det booleske udtryk afhænger normalt af en værdi, der genereres eller hentes i kodeblokken. - Sætningen
whileevaluerer først et boolesk udtryk og fortsætter med at gentage gennem kodeblokken, så længe det booleske udtryk evalueres tiltrue. - Nøgleordet
continue, der skal træde i det booleske udtryk med det samme.