For-løkke
En løkke gør det muligt at udføre et stykke kode så mange gange, som vi ønsker. Der findes forskellige typer løkker. I C# bruger vi en for loop, hvis vi vil udføre et stykke kode et bestemt antal gange.
Skabelonen (syntaksen) for en for-løkke er følgende:
for(initiation; condition; operation) {
// code to execute
}
Lad os se på et eksempel, hvor vi bruger denne syntaks:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Bemærk
i++svarer tili = i + 1. Det øger værdien af variablen med1. Tilsvarende mindskeri--værdien med1.
int i = 0er initialiseringsdelen. Initialisering sker, når løkken starter. Ved starten af løkken oprettes en ny midlertidig variabel kaldeti, som initialiseres med værdien0.i < 10er betingelsen. Betingelsen kontrolleres ved hver iteration (gentagelse) af løkken. Løkken fortsætter med at udføre den indlejrede kodeblok, så længe betingelsen er sand.i++er operationen, der udføres efter hver iteration. Operationen er typisk en forøgelse eller formindskelse. Da værdien afiøges efter hver iteration, bliver betingelseni < 10falsk efter 10 iterationer, og løkken stopper.
Det er vigtigt at forstå, at alle tre komponenter i for-løkken — initialization, condition og operation — er valgfrie. Du kan udelade en eller flere af dem, men dette kan ændre, hvordan løkken opfører sig.
Selvom det ikke anbefales, kan du erklære løkkevariablen uden for løkken og lade initialization-delen stå tom. Dette betyder, at løkken stadig fungerer, men du skal være opmærksom, da det kan føre til uventede resultater, hvis det ikke håndteres korrekt.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Vi kan også fjerne operation-delen og placere den i slutningen af løkkens kodeblok. Løkken vil opføre sig på samme måde som før, da variablen i stadig bliver forøget efter hver iteration.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Bemærk, at vi i ovenstående kode stadig indsatte et semikolon (;) i løkkesyntaksen, hvor int i = 0 var forventet. Dette semikolon skal altid være der, uanset om vi opretter en løkkevariabel eller ej.
Det er også muligt at fjerne løkkebetingelsen, men det får løkken til at køre uendeligt, hvis den ikke afsluttes manuelt (hvilket vi vil lære mere om i de senere kapitler).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Bemærk
Vi har stadig inkluderet begge semikoloner i løkkesyntaksen
for(;;), da disse er nødvendige, ellers vil compileren vise fejl.
Da værdien af i ændres ved hver iteration, kan vi udnytte dette. For at forstå dette, lad os se på et simpelt program, der udskriver værdien af i ved hver iteration:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Bemærk, at den slutter ved 9, fordi den starter med tallet 0. Det samlede antal iterationer var ti. Vi kan ændre initialiseringen, betingelsen og operationen for at udskrive de ti lige tal fra 2 til 20.
Bemærk
Lige tal er tal, der er delelige med
2. For eksempel 2, 4, 6, 8, 10 osv. Lige tal inkluderer også tallet0, men vi vil kun arbejde med lige tal over0i disse eksempler.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Bemærk
i += 2er en kortere måde at skrivei = i + 2på. Denne syntaks er også gyldig for andre operatorer, for eksempeli -= 2,i *= 2,i /= 2,i %= 2osv.
Løkken starter med 0 og øger værdien af i med 2 for hver iteration. Vi ændrede betingelsen til i <= 20, så løkken stopper ved 20.
Ovenstående logik var for at forstå, hvordan en for-løkke fungerer. Vi kan bruge en meget enklere logik til at udskrive de første ti lige tal:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
I dette tilfælde er betingelsen meget enklere. For eksempel, hvis vi ønsker de første 27 lige tal, skal vi vide, hvad det 27. lige tal er for at kunne danne betingelsen for den tidligere metode, men i dette tilfælde skal vi blot ændre betingelsen til i <= 27:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain how to use a for loop to print odd numbers?
What happens if I remove all three components from the for loop?
Can you show an example of an infinite for loop and how to stop it?
Awesome!
Completion rate improved to 1.59
For-løkke
Stryg for at vise menuen
En løkke gør det muligt at udføre et stykke kode så mange gange, som vi ønsker. Der findes forskellige typer løkker. I C# bruger vi en for loop, hvis vi vil udføre et stykke kode et bestemt antal gange.
Skabelonen (syntaksen) for en for-løkke er følgende:
for(initiation; condition; operation) {
// code to execute
}
Lad os se på et eksempel, hvor vi bruger denne syntaks:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Bemærk
i++svarer tili = i + 1. Det øger værdien af variablen med1. Tilsvarende mindskeri--værdien med1.
int i = 0er initialiseringsdelen. Initialisering sker, når løkken starter. Ved starten af løkken oprettes en ny midlertidig variabel kaldeti, som initialiseres med værdien0.i < 10er betingelsen. Betingelsen kontrolleres ved hver iteration (gentagelse) af løkken. Løkken fortsætter med at udføre den indlejrede kodeblok, så længe betingelsen er sand.i++er operationen, der udføres efter hver iteration. Operationen er typisk en forøgelse eller formindskelse. Da værdien afiøges efter hver iteration, bliver betingelseni < 10falsk efter 10 iterationer, og løkken stopper.
Det er vigtigt at forstå, at alle tre komponenter i for-løkken — initialization, condition og operation — er valgfrie. Du kan udelade en eller flere af dem, men dette kan ændre, hvordan løkken opfører sig.
Selvom det ikke anbefales, kan du erklære løkkevariablen uden for løkken og lade initialization-delen stå tom. Dette betyder, at løkken stadig fungerer, men du skal være opmærksom, da det kan føre til uventede resultater, hvis det ikke håndteres korrekt.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Vi kan også fjerne operation-delen og placere den i slutningen af løkkens kodeblok. Løkken vil opføre sig på samme måde som før, da variablen i stadig bliver forøget efter hver iteration.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Bemærk, at vi i ovenstående kode stadig indsatte et semikolon (;) i løkkesyntaksen, hvor int i = 0 var forventet. Dette semikolon skal altid være der, uanset om vi opretter en løkkevariabel eller ej.
Det er også muligt at fjerne løkkebetingelsen, men det får løkken til at køre uendeligt, hvis den ikke afsluttes manuelt (hvilket vi vil lære mere om i de senere kapitler).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Bemærk
Vi har stadig inkluderet begge semikoloner i løkkesyntaksen
for(;;), da disse er nødvendige, ellers vil compileren vise fejl.
Da værdien af i ændres ved hver iteration, kan vi udnytte dette. For at forstå dette, lad os se på et simpelt program, der udskriver værdien af i ved hver iteration:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Bemærk, at den slutter ved 9, fordi den starter med tallet 0. Det samlede antal iterationer var ti. Vi kan ændre initialiseringen, betingelsen og operationen for at udskrive de ti lige tal fra 2 til 20.
Bemærk
Lige tal er tal, der er delelige med
2. For eksempel 2, 4, 6, 8, 10 osv. Lige tal inkluderer også tallet0, men vi vil kun arbejde med lige tal over0i disse eksempler.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Bemærk
i += 2er en kortere måde at skrivei = i + 2på. Denne syntaks er også gyldig for andre operatorer, for eksempeli -= 2,i *= 2,i /= 2,i %= 2osv.
Løkken starter med 0 og øger værdien af i med 2 for hver iteration. Vi ændrede betingelsen til i <= 20, så løkken stopper ved 20.
Ovenstående logik var for at forstå, hvordan en for-løkke fungerer. Vi kan bruge en meget enklere logik til at udskrive de første ti lige tal:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
I dette tilfælde er betingelsen meget enklere. For eksempel, hvis vi ønsker de første 27 lige tal, skal vi vide, hvad det 27. lige tal er for at kunne danne betingelsen for den tidligere metode, men i dette tilfælde skal vi blot ændre betingelsen til i <= 27:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Tak for dine kommentarer!