Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære For-løkke | Løkker
C# Grundlæggende

bookFor-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

main.cs

copy
123456789101112131415
using 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 til i = i + 1. Det øger værdien af variablen med 1. Tilsvarende mindsker i-- værdien med 1.

  • int i = 0 er initialiseringsdelen. Initialisering sker, når løkken starter. Ved starten af løkken oprettes en ny midlertidig variabel kaldet i, som initialiseres med værdien 0.
  • i < 10 er 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 af i øges efter hver iteration, bliver betingelsen i < 10 falsk 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

main.cs

copy
12345678910111213141516
using 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

main.cs

copy
1234567891011121314151617
using 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

main.cs

copy
1234567891011121314151617
using 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

main.cs

copy
123456789101112131415
using 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å tallet 0, men vi vil kun arbejde med lige tal over 0 i disse eksempler.

main.cs

main.cs

copy
123456789101112131415
using 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 += 2 er en kortere måde at skrive i = i + 2 på. Denne syntaks er også gyldig for andre operatorer, for eksempel i -= 2, i *= 2, i /= 2, i %= 2 osv.

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

main.cs

copy
1234567891011121314
using 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

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Hvad vil outputtet af følgende program være? Værdien af sum øges for hver iteration med i, derfor vil dens værdi under de første fire iterationer være: 1, 3, 6, 10.

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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

bookFor-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

main.cs

copy
123456789101112131415
using 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 til i = i + 1. Det øger værdien af variablen med 1. Tilsvarende mindsker i-- værdien med 1.

  • int i = 0 er initialiseringsdelen. Initialisering sker, når løkken starter. Ved starten af løkken oprettes en ny midlertidig variabel kaldet i, som initialiseres med værdien 0.
  • i < 10 er 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 af i øges efter hver iteration, bliver betingelsen i < 10 falsk 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

main.cs

copy
12345678910111213141516
using 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

main.cs

copy
1234567891011121314151617
using 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

main.cs

copy
1234567891011121314151617
using 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

main.cs

copy
123456789101112131415
using 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å tallet 0, men vi vil kun arbejde med lige tal over 0 i disse eksempler.

main.cs

main.cs

copy
123456789101112131415
using 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 += 2 er en kortere måde at skrive i = i + 2 på. Denne syntaks er også gyldig for andre operatorer, for eksempel i -= 2, i *= 2, i /= 2, i %= 2 osv.

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

main.cs

copy
1234567891011121314
using 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

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Hvad vil outputtet af følgende program være? Værdien af sum øges for hver iteration med i, derfor vil dens værdi under de første fire iterationer være: 1, 3, 6, 10.

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1
some-alt