Nighthawk.dk

Grundlæggende C#: Loops

Skrevet d. 11. May 2022 af Claus Nielsen.

Skal du have gentaget noget kode? Drop copy/paste og brug et loop!

Loops

Man har ofte brug for at køre en kodeblok mange gange, og til dette bruger man loops (eller løkker på dansk).

Der findes flere typer af loops, men det mest simple er et while-loop:

int a = 1;
while(a < 10)
{
	Console.WriteLine("'a' er nu {0} inde i loopet!", a);
	a += 1;
}
Console.WriteLine("'a' er {0} efter loopet.", a);

Et while-loop skrives altså ligesom en if-sætning, men i stedet for at kodeblokken mellem { og } køres hvis betingelsen er sand, så køres kodeblokken i stedet så længe betingelsen er sand.

Det vil altså sige, at hver gang kodeblokken er blevet kørt, tjekkes betingelsen endnu en gang, og hvis betingelsen stadig er sand, køres kodeblokken igen.

I eksemplet sættes først a = 1, og dernæst tjekkes betingelsen a < 10, som er sand. Derfor køres kodeblokken, som først udskriver værdien af a og derefter lægger 1 til værdien af a idet udtrykket a += 1; er en forkortelse for a = a + 1;.

Hermed afsluttes kodeblokken, og betingelsen a < 10 tjekkes igen, og det er stadig sandt idet a nu har værdien 2, hvorfor kodeblokken køres endnu engang. Herefter har a værdien 3, betingelsen er igen sand, kodeblokken køres igen, osv.

Advarsel: Undgå uendelige loops!

Bemærk at linien med a += 1; er meget vigtig i eksemplet ovenfor.

Uden denne linie vil betingelsen i while-loopet altid være opfyldt, idet a aldrig bliver større, og man vil få et uendeligt loop. Man skal passe meget på med uendelige loops idet de får dit program til at "fryse".

Opgave 13

Lav et program der udskriver 8-tabellen ved hjælp af et while-loop.

Udvid derefter programmet så brugeren kan vælge hvilken tabel der skal udskrives.

Hvis man har et loop, som skal køres et bestemt antal gange (f.eks. blev loopet i eksemplet ovenfor kørt 9 gange), så kan man også bruge et for-loop i stedet. Eksemplet ser således ud, hvis det i stedet bruger et for-loop:

for(int a = 1 ; a < 10 ; a += 1)
{
	Console.WriteLine("'a' er nu {0} inde i loopet!", a);
}

Når du bruger et for-loop skal du altså skrive tre ting mellem ( og ), som adskilles af ;:

  • Først definerer du en variabel.
  • Så skriver du en betingelse.
  • Sidst skriver du hvordan variablen skal ændres, når kodeblokken er kørt.

Inden kodeblokken til for-loopet køres, udføres den første betingelse: der laves en variabel af typen int, der hedder a, og har værdien 1. Så tjekkes betingelsen, som skal stå efter første semi-kolon ; i for-loopet, og hvis den er sand, udføres kodenblokken.

Efter kodeblokken er udført, køres den sidste kommando i for-loopet, som står efter 2. semi-kolon ; og som lægger 1 til variablen a. Herefter tjekkes betingelsen igen, og hvis den er sand køres kodeblokken endnu engang, hvorefter kommandoen a += 1 køres endnu engang. Så tjekkes betingelsen igen, osv.

Et for-loop er altså nogle gange bare en kortere måde at lave et loop på, end med while. De to loops i eksemplerne gør altså præcis det samme.

Bemærk: Scope af for-variabel

Der er dog en vigtig forskel på eksemplerne: Bemærk at sidste linie i while-eksemplet udskriver værdien af variablen a efter kodenblokken, som hører til loopet.

Dette kan ikke gøres i for-eksemplet, fordi variablen som laves i et for-loop kun eksisterer indenfor for-loopet - og efter kodeblokken som hører til for-loopet så eksisterer variablen a simpelthen ikke mere!

Prøv selv at tilføje sidste linie fra while-eksemplet til for-eksemplet, og se at det går galt!

Opgave 14

Lav et program der udskriver 8-tabellen ved hjælp af et for-loop.

Udvid derefter programmet så brugeren kan vælge hvilken tabel der skal udskrives.

Opgave 15

Udvid programmet så det udskriver de 10 første tabeller ved hjælp af endnu et for-loop. Man kan sagtens have et loop indeni et andet loop!

Ofte er det nemmest at bruge et for-loop, hvis du ved hvor mange gange et loop skal køres - men det ved du ikke altid! Forestil dig, at du laver en menu, hvor brugeren skal indtaste et nummer for at vælge menupunkt:

int a = 0;
while(a != 3)
{
	// Udskriv menu
	Console.WriteLine("Vælg et punkt på menuen:");
	Console.WriteLine(" 1 - Udskriv en tabel");
	Console.WriteLine(" 2 - Giv mig et regnestykke");
	Console.WriteLine(" 3 - Afslut program");

	// Se hvad brugeren indtaster
	a = Convert.ToInt32(Console.ReadLine());

	if (a == 1)
	{
		// Brugeren har valgt punk 1 på menuen
	}
	else if (a == 2)
	{
		// Brugeren har valgt punk 2 på menuen
	}
	else if (a == 3)
	{
		Console.WriteLine("Du har valgt at aflsutte programmet!");
	}
	else
	{
		Console.WriteLine("Du har valgt noget, som ikke er på menuen!");
	}
}
Opgave 16

Forklar hvorfor programmet i menu-eksemplet ovenfor afsluttes når man indtaster værdien "3".

Opgave 17

Udvid programmet i menu-eksemplet, så brugeren kan få udskrevet en tabel hvis man taster "1" til menuen. Spørg brugeren hvilken tabel, der skal udskrives.

Opgave 18

Udvid programmet i menu-eksemplet, så brugeren kan få udskrevet et regnestykke (som i opgave 11), hvis man vælger "2" i menuen.

Opgave 19

I et program som menu-eksemplet giver det ikke meget mening at bruge et for-loop i stedet for while.

Lav samme program med et for-loop i stedet, og forklar hvorfor et while-loop er bedre her.

Du har nu styr på det vigtigste omkring loops, men der er to kommandoer mere, som det kan være godt at kende til: break og continue. De kan illustreres med et eksempel:

for (int a = 1; a < 10; a += 1)
{
	if(a == 3)
	{
		continue;
	}
	else if(a == 9)
	{
		break;
	}

	Console.WriteLine("'a' er nu {0} inde i loopet!", a);
}
Opgave 20

Prøv at køre koden i eksemplet ovenfor. Forklar hvad continue og break gør - prøv at ændre i koden, for at undersøge dem nærmere.

Opgave 21

Prøv at ændre while(a != 3) i menu-eksemplet til while(1 == 1), der laver et uendeligt loop (forklar hvorfor).

Hvordan kan du nu stoppe det uendelige loop hvis brugeren har tastet "3"?

Hint: Skal du bruge continue eller break?

Relaterede ressourcer
C# Grundbog

Niels Hilmar Madsen og Michell Cronberg,
Libris, 2003

×