Øvelse – Opret og konfigurer for gentagelsesløkker
- 14 minutter
På overfladen er sætningen for en anden 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 sætningen for ?
Sætningen for gentager sig gennem en kodeblok for et bestemt antal gange. Dette kontrolniveau gør sætningen for entydig blandt de andre gentagelsessætninger. Sætningen foreach gentager sig gennem en kodeblok én gang for hvert element i en sekvens af data, f.eks. en matrix eller samling. Sætningen while gentager sig gennem en kodeblok, indtil en betingelse er opfyldt.
Desuden giver sætningen for dig meget mere kontrol over gentagelsesprocessen ved at udsætte betingelserne for gentagelse.
I denne øvelse skal du bruge sætningen for , hvor du lærer, hvordan du styrer gentagelsens præbetingelse, betingelse for fuldførelse, gentagelsesmønster og meget mere. Du får også mere at vide om almindelige use cases til sætningen for .
Okay, lad os nu forberede vores kodemiljø og begynde vores undersøgelse af kodeeksempler, der implementerer en for 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 grundlæggende for sætning
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.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Denne kode præsenterer en simpel
forsætning, der går gennem kodeblokken 10 gange og udskriver den aktuelle værdi afi.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>Du bør kunne se følgende output.
0 1 2 3 4 5 6 7 8 9Brug et minut på at identificere de seks dele af sætningen
for.Sætningen
forindeholder følgende seks dele:- Nøgleordet
for. - Et sæt parenteser, der definerer betingelserne for
forgentagelse. Parenteserne indeholder tre særskilte dele adskilt af slutningen af sætningsoperatoren, et semikolon. - Den første del definerer og initialiserer iteratorvariablen. I dette eksempel:
int i = 0. Dette afsnit kaldes initialiseringsfunktionen. - Den anden del definerer betingelsen for fuldførelse. I dette eksempel:
i < 10. Med andre ord fortsætter kørslen med at gentage over koden i kodeblokken under sætningenfor, mensiden er mindre end10. Nåribliver lig10med , stopper kørslen afforsætningens kodeblok. Dokumentationen refererer til denne sektion som betingelsen. - Den tredje del definerer den handling, der skal udføres efter hver gentagelse. I dette tilfælde forøges
i++værdien afimed 1 efter hver gentagelse. Dokumentationen henviser til dette afsnit som iterator. - Til sidst kodeblokken. Kodeblokken indeholder den kode, der udføres for hver gentagelse. Bemærk, at der refereres til værdien af
ii kodeblokken. Dokumentationen henviser til dette afsnit som brødtekst.
I betragtning af vores regler for navngivning af variabler kan du undre dig over, om
ier et gyldigt navn for den variabel, der indeholder den aktuelle gentagelse. I dette tilfældeianses af de fleste for at være gyldige. Andre populære valg erxogcounter. Navnetjbruges også i de situationer, hvor du har en ydreforsætning, der brugeri, og skal oprette en gentagelsesvariabel for en indreforsætning.Seddel
Alle tre sektioner (initialisering, betingelse og iterator) er valgfrie. I praksis bruges dog typisk alle tre sektioner.
- Nøgleordet
Rediger gentagelsesbetingelserne
Som vi sagde indledningsvist, for har erklæringen to unikke kvaliteter blandt gentagelseserklæringer.
- Sætningen
forskal bruges, når du kender det antal gange, du har brug for at gentage gennem en kodeblok på forhånd. - Sætningen
forgiver dig mulighed for at styre den måde, hver gentagelse håndteres på.
Hvad nu, hvis vi skulle gentage gennem en kodeblok, men vil tælle ned i stedet for at tælle op?
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Brug et øjeblik på at gennemse din opdaterede kode.
Ved at ændre de tre dele af sætningen
forændrer vi dens funktionsmåde.- Vi initialiserer gentagelsesvariablen til 10.
- Vi ændrer fuldførelsesbetingelsen for at afslutte sætningen
for, nårier mindre end0. - Vi ændrer gentagelsesmønsteret, så det trækkes
1frai, hver gang vi fuldfører en gentagelse.
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.Bemærk, at outputtet er ændret.
Når du kører koden, får du vist følgende output.
10 9 8 7 6 5 4 3 2 1 0
Eksperimentér med iteratorens mønster
Hvad gør vi, hvis vi vil springe forbi bestemte værdier i iteratorvariablen?
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Brug et øjeblik på at gennemse din opdaterede kode.
I stedet for at forøge eller formindske værdien af iteratorvariablen med
1brugeri += 3vi til at springe to værdier over efter hver gentagelse.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.Bemærk, hvordan outputtet er ændret.
Når du kører koden, får du vist følgende output.
0 3 6 9Ganske vist vil du ikke gøre denne slags ting ofte, men forhåbentlig kan du sætte pris på, at du har en fin kornet niveau af kontrol over gentagelser, hvis du nogensinde har brug for det.
Brug nøgleordet pause til at bryde gentagelsessætningen
Hvad nu, hvis vi skal afslutte gentagelseserklæringen for tidligt baseret på en eller anden betingelse? Vi kan bruge nøgleordet break .
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Brug et øjeblik på at gennemse brugen af nøgleordet
breaki din opdaterede kode.Vi så først nøgleordet
breaki modulet "Forgren kodeflowet ved hjælp af switch-case-konstruktionen i C#". Som det viser sig, kan vi også bruge nøgleordetbreaktil at afslutte gentagelsessætninger.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.Bemærk, hvordan outputtet er ændret.
Når du kører koden, får du vist følgende output.
0 1 2 3 4 5 6 7
Løkke gennem hvert element i en matrix
En almindelig brug af sætningen for er at gentage gennem en matrix af elementer, især hvis du har brug for en vis kontrol over den måde, gentagelsen sker på. Mens gentagelserne foreach gennem alle elementer i matrixen, kan sætningen for justeres for at give flere tilpasninger.
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Brug et øjeblik på at gennemse din opdaterede kode.
Først og fremmest skal du bemærke, at vi har instantieret en strengmatrix med navnet
names, der indeholder fire navne.Bemærk derefter, at vi bruger
Array.Lengthegenskaben til at hente antallet af elementer i matrixen, og at vi bruger denne værdi til at initialisere iteratorvariablen (int i = names.Length - 1). Vi trækker 1 fra værdien, fordi indeksnummeret for matrixelementer er nulbaseret (indeksnumrene på de fire elementer er 0-3).Til sidst kan du se, at vi har valgt at gentage gennem matrixen bagud – noget, som vi ikke kan gøre med sætningen
foreach. Vi bruger værdien af gentagelsesvariablen i kodeblokken til at angive indeksnummeret for matrixelementerne (names[i]).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.Bemærk, at matrixelementerne er angivet i omvendt rækkefølge (som vi havde til hensigt).
Når du kører koden, får du vist følgende output.
Michael David Eddie AlexSeddel
Vi kunne have gentaget fremad gennem matrixelementerne ved at oprette sætningen
forpå følgende måde:for (int i = 0; i < names.Length; i++).
Undersøg begrænsningen af foreach-sætningen
Hvad sker der, hvis du vil opdatere en værdi i matrixen under en foreach gentagelse?
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }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.Bemærk den fejlmeddelelse, der vises.
Hvis du forsøger at kompilere og køre denne kode, får du vist en undtagelse.
Cannot assign to name because it is a 'foreach iteration variable'Du kan med andre ord ikke tildele værdien af
nameigen, fordi den er en del afforeachgentagelsens indre implementering.
Overvindelse af begrænsningen i foreach-sætningen ved hjælp af for-sætningen
Lad os prøve at bruge en for sætning til at ændre indholdet af en matrix i gentagelseskodeblokken.
Brug Visual Studio Code Editor til at opdatere din kode på følgende måde:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);Brug et øjeblik på at gennemse din opdaterede kode.
Bemærk, at vi har fjernet krøllede klammeparenteser fra kodeblokke, der kun indeholdt en enkelt kodelinje. Denne revision bruger den samme teknik, som vi talte om i modulet "Kontrollér variabelt omfang og logik ved hjælp af kodeblokke i C#". Mange udviklere finder denne stil vanskelig at læse, mens andre foretrækker denne forkortede stil, fordi det hjælper dem med at skrive mere kortfattet og mere udtryksfuldt. Hvis du finder denne kode svær at læse, eller hvis du bare ikke foretrækker denne typografi, kan du være sikker på, at krøllede klammeparenteser altid kan bruges i dine kodeblokke. Hvis du vil, skal du opdatere koden i panelet Editor med følgende kode:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }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.Bemærk, at koden kører uden fejl og genererer det ønskede output.
Når du kører koden, får du vist følgende output.
Alex Eddie Sammy MichaelDa matrixen ikke er en direkte del af implementering af gentagelsessætningen, kan du ændre værdier i matrixen.
Resumé
Her er et par af takeaways fra dette undermodul:
- Gentagelsessætningen
forgiver dig mulighed for at gentage et bestemt antal gange gennem en kodeblok. - Gentagelsessætningen
forgiver dig mulighed for at styre alle aspekter af gentagelsens mekanik ved at ændre de tre betingelser i parenteserne: initialiseringsfunktionen, betingelsen og iteratoren. - Det er almindeligt at bruge sætningen
for, når du har brug for at styre, hvordan du vil gentage gennem hvert element i en matrix. - Hvis din kodeblok kun har én kodelinje, kan du fjerne krøllede klammeparenteser og blanktegn, hvis du ønsker det.
Videntjek
Feedback
Var denne side nyttig?
No
Har du brug for hjælp til dette emne?
Vil du prøve at bruge Ask Learn til at tydeliggøre eller guide dig gennem dette emne?