Øvelse – Opprette og konfigurere for gjentakelsesløkker
- 14 minutter
På overflaten for er setningen en annen gjentakelseserklæring som lar deg gjentakelse gjennom en kodeblokk og dermed endre flyten av kjøring av koden. Men når vi undersøker hvordan hver fungerer, kan vi bedre identifisere nyansene i hver gjentakelseserklæring og når vi skal bruke dem.
Hva er setningen for ?
Setningen for itererer gjennom en kodeblokk et bestemt antall ganger. Dette kontrollnivået gjør setningen for unik blant de andre gjentakelsessetningene. Setningen foreach itererer gjennom en kodeblokk én gang for hvert element i en sekvens med data, for eksempel en matrise eller samling. Erklæringen while itererer gjennom en kodeblokk til en betingelse er oppfylt.
I tillegg gir erklæringen for deg mye mer kontroll over gjentakelsesprosessen ved å vise betingelsene for gjentakelse.
I denne øvelsen skal du bruke for setningen, lære hvordan du kontrollerer gjentakelsens pre-tilstand, fullføringsbetingelse, gjentakelsesmønster og mer. Du vil også lære om vanlige brukstilfeller for setningen for .
La oss nå forberede kodingsmiljøet vårt og starte vår undersøkelse av kodeeksempler som implementerer en for uttalelse.
Klargjøre kodemiljøet
Denne modulen inneholder praktiske aktiviteter som veileder deg gjennom prosessen med å bygge og kjøre demonstrasjonskode. Vi oppfordrer deg til å fullføre disse aktivitetene ved hjelp av Visual Studio Code som utviklingsmiljø. Hvis du bruker Visual Studio Code for disse aktivitetene, kan du bli mer komfortabel med å skrive og kjøre kode i et utviklermiljø som brukes av profesjonelle over hele verden.
Åpne Visual Studio Code.
Du kan bruke Start-menyen i Windows (eller tilsvarende ressurs for et annet operativsystem) til å åpne Visual Studio Code.
Velg Åpne mappe på Visual Studio Code File-menyen.
Gå til Windows-skrivebordsmappen i dialogboksen Åpne mappe .
Hvis du har en annen mappeplassering der du beholder kodeprosjekter, kan du bruke denne mappeplasseringen i stedet. For denne opplæringen er det viktig å ha en plassering som er enkel å finne og huske.
Velg Velg mappe i dialogboksen Åpne mappe.
Hvis du ser en sikkerhetsdialogboks som spør om du stoler på forfatterne, velger du Ja.
Velg Ny terminal på Visual Studio Code Terminal-menyen.
Legg merke til at en ledetekst i Terminal-panelet viser mappebanen for gjeldende mappe. For eksempel:
C:\Users\someuser\Desktop>Merk deg
Hvis du arbeider på din egen PC i stedet for i en sandkasse eller et vertsbasert miljø, og du har fullført andre Microsoft Learn-moduler i denne C#-serien, har du kanskje allerede opprettet en prosjektmappe for kodeeksempler. Hvis dette er tilfellet, kan du hoppe over neste trinn, som brukes til å opprette en konsollapp i TestProject-mappen.
Hvis du vil opprette et nytt konsollprogram i en angitt mappe i terminalkommandoen, skriver du inn følgende ledetekst:
dotnet new console -o ./CsharpProjects/TestProjectDenne .NET CLI-kommandoen bruker en .NET-programmal til å opprette et nytt C#-konsollprogramprosjekt i den angitte mappeplasseringen. Kommandoen oppretter mappene CsharpProjects og TestProject for deg, og bruker TestProject som navnet på
.csprojfilen.Hvis det vises en melding som forteller deg at filene allerede finnes, fortsetter du med de neste trinnene. Du bruker de eksisterende prosjektfilene på nytt.
Utvid CsharpProjects-mappen i EXPLORER-visningen.
Du skal se TestProject-mappen og to filer, en C#-programfil med navnet Program.cs og en C#-prosjektfil kalt TestProject.csproj.
Velg Åpne mappe på Visual Studio Code File-menyen.
Velg CsharpProjects-mappen i dialogboksen Åpne mappe, og velg deretter Velg mappe.
Utvid TestProject-mappen i UTFORSKER-visningen, og velg deretter Program.cs.
Slett eksisterende kodelinjer.
Du skal bruke dette C#-konsollprosjektet til å opprette, bygge og kjøre kodeeksempler under denne modulen.
Lukk Terminal-panelet.
Skriv en grunnleggende setning
Kontroller at Visual Studio Code er åpen og Program.cs vist i redigeringspanelet.
Merk deg
Program.cs skal være tom. Hvis ikke, velger og sletter du alle kodelinjer.
Skriv inn følgende kode i Visual Studio Code Editor.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Denne koden presenterer en enkel
forsetning som går gjennom kodeblokken 10 ganger, og skriver ut gjeldende verdi fori.Velg Lagre på Visual Studio Code File-menyen.
Den Program.cs filen må lagres før du bygger eller kjører koden.
Høyreklikk på TestProjecti EXPLORER-panelet, og velg deretter Åpne i integrert terminal.
Et terminalpanel åpnes. Terminalen bør inneholde en ledetekst som viser at terminalen er åpen for plasseringen av TestProject-mappen.
Skriv inn dotnet-kjøring i terminalkommandoledeteksten for å kjøre koden, og trykk deretter ENTER.
Merk deg
Hvis du ser en melding som sier «Finner ikke et prosjekt å kjøre», må du kontrollere at terminalkommandoledeteksten viser den forventede plasseringen av TestProject-mappen. Eksempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du skal se følgende utdata.
0 1 2 3 4 5 6 7 8 9Ta et minutt å identifisere de seks delene av setningen
for.Setningen
forinneholder følgende seks deler:- Nøkkelordet
for. - Et sett med parenteser som definerer betingelsene
forfor gjentakelse. Parentesene inneholder tre forskjellige deler, atskilt med slutten av setningsoperatoren, et semikolon. - Den første delen definerer og initialiserer gjentakelsesvariabelen. I dette eksemplet:
int i = 0. Denne delen kalles initialisereren. - Den andre delen definerer fullføringsbetingelsen. I dette eksemplet:
i < 10. Kjøretiden vil med andre ord fortsette å iterere over koden i kodeblokken under setningen, mensfordenier mindre enn10. Nåriblir lik , slutter kjøretiden å10kjøreforsetningens kodeblokk. Dokumentene refererer til denne inndelingen som betingelsen. - Den tredje delen definerer handlingen som skal utføres etter hver gjentakelse. I dette tilfellet, etter hver gjentakelse,
i++vil øke verdien avimed 1. Dokumentene refererer til denne inndelingen som gjentakelse. - Til slutt kodeblokken. Kodeblokken inneholder koden som skal kjøres for hver gjentakelse. Legg merke til at verdien det
irefereres til i kodeblokken. Dokumentene refererer til denne inndelingen som brødteksten.
Gitt våre regler for navngivning av variabler, lurer du kanskje på om
idet er et gyldig navn for variabelen som inneholder gjeldende gjentakelse. I dette tilfelletianses de fleste å være gyldige. Andre populære valg erxogcounter. Navnetjbrukes også i slike situasjoner når du har en ytreforsetning som brukeri, og må opprette en gjentakelsesvariabel for en indreforsetning.Merk deg
Alle tre inndelingene (initialiserer, betingelse og gjentakelse) er valgfrie. I praksis brukes imidlertid vanligvis alle tre inndelingene.
- Nøkkelordet
Endre gjentakelsesbetingelsene
Som vi uttalte i begynnelsen, for har uttalelsen to unike kvaliteter blant gjentakelsesuttalelser.
- Setningen
forbør brukes når du vet hvor mange ganger du trenger å gjentakelse gjennom en kodeblokk på forhånd. - Med
forsetningen kan du kontrollere hvordan hver gjentakelse håndteres.
Hva om vi trengte å gjentakelse gjennom en kodeblokk, men vil telle ned i stedet for å telle opp?
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Ta deg tid til å se gjennom den oppdaterte koden.
Ved å endre de tre delene av setningen, endrer vi virkemåten
for.- Vi initialiserer gjentakelsesvariabelen til 10.
- Vi endrer fullføringsbetingelsen for å avslutte setningen når
fordenier mindre enn0. - Vi endrer mønsteret til gjentakelsen for å trekke
1fraihver gang vi fullfører en gjentakelse.
Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til at utdataene er endret.
Når du kjører koden, ser du følgende utdata.
10 9 8 7 6 5 4 3 2 1 0
Eksperimenter med gjentakelsesmønsteret
Hva om vi vil hoppe over bestemte verdier i gjentakelsesvariabelen?
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Ta deg tid til å se gjennom den oppdaterte koden.
I stedet for å øke eller redusere verdien for gjentakelsesvariabelen etter
1, brukeri += 3vi til å hoppe over to verdier etter hver gjentakelse.Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til hvordan utdataene er endret.
Når du kjører koden, ser du følgende utdata.
0 3 6 9Riktignok vil du ikke gjøre denne typen ting ofte, men forhåpentligvis kan du sette pris på at du har et finkornet nivå av kontroll over gjentakelsene hvis du noen gang trenger det.
Bruk nøkkelordet for brudd til å bryte gjentakelsessetningen
Hva om vi trenger å avslutte gjentakelseserklæringen for tidlig basert på en betingelse? Vi kan bruke break nøkkelordet.
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Ta deg tid til å se gjennom bruken av
breaknøkkelordet i den oppdaterte koden.Vi så
breakførst nøkkelordet i modulen «Forgren flyten av kode ved hjelp av brytertilfellekonstrukten i C#». Som det viser seg, kan vi brukebreaknøkkelordet til å avslutte ut av gjentakelsessetninger også.Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til hvordan utdataene er endret.
Når du kjører koden, ser du følgende utdata.
0 1 2 3 4 5 6 7
Gå gjennom hvert element i en matrise
En vanlig bruk av setningen for er å gjentakelse gjennom en matrise med elementer, spesielt hvis du trenger litt kontroll over måten gjentakelsen skjer på. Mens gjentakelser foreach gjennom hvert element i matrisen for , kan setningen tilpasses for å gi flere tilpasninger.
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Ta deg tid til å se gjennom den oppdaterte koden.
Legg først merke til at vi har startet en strengmatrise med navnet
namessom inneholder fire navn.Legg deretter merke til at vi bruker
Array.Lengthegenskapen til å hente antall elementer i matrisen, og at vi bruker denne verdien til å initialisere gjentakelsesvariabelen (int i = names.Length - 1). Vi trekker 1 fra verdien fordi indeksnummeret for matriseelementer er nullbasert (indekstallene for de fire elementene er 0-3).Til slutt, legg merke til at vi har valgt gjentakelse gjennom matrisen bakover - noe som vi ikke kan gjøre med setningen
foreach. Vi bruker verdien for gjentakelsesvariabelen i kodeblokken til å angi indeksnummeret for matriseelementene (names[i]).Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til at matriseelementene er oppført i omvendt rekkefølge (slik vi hadde tenkt).
Når du kjører koden, ser du følgende utdata.
Michael David Eddie AlexMerk deg
Vi kunne ha gjentakelset fremover gjennom matriseelementene ved å konstruere setningen
forsom følger:for (int i = 0; i < names.Length; i++).
Undersøk begrensningen for forgrunnssetningen
Hva om du vil oppdatere en verdi i matrisen under en foreach gjentakelse?
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til feilmeldingen som vises.
Hvis du prøver å kompilere og kjøre denne koden, ser du et unntak.
Cannot assign to name because it is a 'foreach iteration variable'Du kan med andre ord ikke tilordne verdien på
namenytt fordi den er en del av iterasjonensforeachindre implementering.
Overskrider begrensningen for forgrunnssetningen ved hjelp av for-setningen
La oss prøve å bruke en for setning til å endre innholdet i en matrise i gjentakelseskodeblokken.
Bruk Visual Studio Code Editor til å oppdatere koden på følgende måte:
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);Ta deg tid til å se gjennom den oppdaterte koden.
Legg merke til at vi fjernet klammeparentesene fra kodeblokkene som bare inneholdt én enkelt kodelinje. Denne revisjonen bruker samme teknikk som vi snakket om i modulen «Kontrollvariabel omfang og logikk ved hjelp av kodeblokker i C#». Mange utviklere synes denne stilen er vanskelig å lese, mens andre foretrekker denne forkortede stilen fordi den hjelper dem med å skrive mer konsist og mer uttrykksfullt. Hvis du synes denne koden er vanskelig å lese, eller hvis du bare ikke foretrekker denne stilen, må du være trygg på at klammeparentesene alltid kan brukes i kodeblokkene. Hvis du vil, kan du oppdatere koden i redigeringspanelet 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); }Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til at koden kjøres uten feil og genererer de ønskede utdataene.
Når du kjører koden, ser du følgende utdata.
Alex Eddie Sammy MichaelSiden matrisen ikke er direkte en del av implementeringen av gjentakelsessetningen, kan du endre verdier i matrisen.
Oppsummering
Her er noen av takeaways fra denne enheten:
- Gjentakelsessetningen
forlar deg gjentakelse gjennom en kodeblokk et bestemt antall ganger. - Gjentakelseserklæringen
forlar deg kontrollere alle aspekter av gjentakelsens mekanikk ved å endre de tre betingelsene i parentesene: initialisereren, tilstanden og gjentakelsen. - Det er vanlig å bruke setningen
fornår du trenger å kontrollere hvordan du vil gjentakelse gjennom hvert element i en matrise. - Hvis kodeblokken bare har én kodelinje, kan du fjerne klammeparenteser og mellomrom hvis du ønsker det.