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# anvendes en for loop, hvis et stykke kode skal udføres et bestemt antal gange.
Skabelonen (syntaksen) for en for-løkke er følgende:
main.cs
123for(initiation; condition; operation) { // code to execute }
Overvej et eksempel, hvor vi anvender 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 variablens værdi med1. Tilsvarende mindskeri--værdien med1.
int i = 0er initialiseringsdelen. Initialisering sker, når løkken starter. Ved begyndelsen af løkken oprettes en ny midlertidig variabel kaldetiog 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 indkapslede 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. Man kan udelade en eller flere af dem, men dette kan ændre, hvordan løkken opfører sig.
Selvom det ikke anbefales, kan løkkevariablen deklareres uden for løkken, og initialization kan udelades. Dette betyder, at løkken stadig fungerer, men det kræver forsigtighed, 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(;;), 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 cifret 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 har ændret betingelsen til i <= 20, så løkken stopper ved 20.
Ovenstående logik er kun 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 ved 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
Fantastisk!
Completion rate forbedret til 1.67
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# anvendes en for loop, hvis et stykke kode skal udføres et bestemt antal gange.
Skabelonen (syntaksen) for en for-løkke er følgende:
main.cs
123for(initiation; condition; operation) { // code to execute }
Overvej et eksempel, hvor vi anvender 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 variablens værdi med1. Tilsvarende mindskeri--værdien med1.
int i = 0er initialiseringsdelen. Initialisering sker, når løkken starter. Ved begyndelsen af løkken oprettes en ny midlertidig variabel kaldetiog 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 indkapslede 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. Man kan udelade en eller flere af dem, men dette kan ændre, hvordan løkken opfører sig.
Selvom det ikke anbefales, kan løkkevariablen deklareres uden for løkken, og initialization kan udelades. Dette betyder, at løkken stadig fungerer, men det kræver forsigtighed, 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(;;), 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 cifret 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 har ændret betingelsen til i <= 20, så løkken stopper ved 20.
Ovenstående logik er kun 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 ved 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!