Inledning
Är du trött på att skriva många if-satser ibland? Skulle du vilja formulera dig snabbare när du ska undersöka olika alternativ? Då är det dags för dig att titta på switch-satsen.
Switch och case
Switch-satsen påminner om if-satsen men är speciellt konstruerad för att hantera en uppräkning av olika utfall. I switch-satsen definieras en eller flera case-satser som sedan avslutas med nyckelordet break.
Studera följande exempel
int tal = int.Parse(Console.ReadLine());
switch(tal)
{
case 1:
Console.WriteLine("Du matade in alternativ 1");
break;
case 2:
Console.WriteLine("Alternativ 2 är också bra!");
break;
}
Se hur varje case följs av ett värde som direkt kan jämföras med det uttryck som switch-satsen hanterar. I exemplet används variabeln tal. Efter värdet följs ett : och sedan koden som körs när fallet (case) inträffar. Här kan vi ha fler än en rad kod givetvis men sen måste fallet avslutas med ett break och ett semikolon.
Exemplet ovan kan jämföras med en if-sats:
int tal = int.Parse(Console.ReadLine());
if(tal == 1)
{
Console.WriteLine("Du matade in alternativ 1");
}
else if(tal == 2)
{
Console.WriteLine("Alternativ 2 är också bra!");
}
När används switch?
Du bör vara vaksam när du skriver din 3:dje if-sats som testar samma uttryck. Då är det troligtvis läge att skriva om och gå över till en switch-sats. Koden blir, enligt många, mer lättläst. En annan anledning är att kompilatorn faktiskt optimerar bättre när du använder en switch-sats.
Det finns lägen då du inte kan använda switch, t.ex. när du har komplicerade villkor som testar mer än en sak.
int tal = int.Parse(Console.ReadLine());
if(tal <= 100 && tal > 10)
{
Console.WriteLine("Du matade in ett tal mellan 11 och 100");
}
else if(tal > 100)
{
Console.WriteLine("Ett tal större än 100");
}
Det är främst när du använder operatorn == upprepade gånger i s.k. nästlade if-satser som en switch-sats kan användas. En nästlad if-sats är just en if-sats med en eller flera else if.
Default
Precis som att if-satsen kan avslutas men en else-sats som "fångar upp" övriga fall så har switch-satsen en motsvarighet. Denna motsvarighet heter default och skrivs enligt samma mönster som:
int tal = int.Parse(Console.ReadLine());
switch(tal)
{
case 1:
Console.WriteLine("Du matade in alternativ 1");
break;
case 2:
Console.WriteLine("Alternativ 2 är också bra!");
break;
default:
Console.WriteLine("Du angav felaktigt alternativ");
break;
}
Flera fall - samma resultat
Ibland kan det vara så att två eller fler fall resulterar i samma kod. Detta kan man lösa i en switch-sats genom att skriva på följande vis:
int tal = int.Parse(Console.ReadLine());
switch(tal)
{
case 1:
Console.WriteLine("Du matade in alternativ 1");
break;
case 2:
Console.WriteLine("Alternativ 2 är också bra!");
break;
case 3:
case 4:
Console.WriteLine("Alternativ 3 o 4 är samma!");
break;
}
I exemplet ovan så är en inmatning på 3 eller 4 samma case. Det går alltså att stapla flera case på varande med samma avslutande break.
Videogenomgång
Övningar
Övning 1
Skriv ett program där du får ange ett alternativ (heltal). Beroende på alternativ så ska olika saker skrivas ut enligt tabell nedan.- 1: "Ett"
- 2: "Två"
- 3: "Tre"
- 4: "Fyra"
- Övriga alternativ: "Ogiltigt alternativ!"
Övning 2
Skriv ett program där du matar in en bokstav (ett tecken). Du gör ett textäventyr och reagerar på följande vis:- N: "You walk north"
- S: "You travel south"
- E: "You wander east"
- W: "You stroll west"
- Övriga alternativ: "I don't understand!"
Hej, jag har har en kompletterande fråga till uppgift 2. om man nu skulle vilja köra detta i en loop dvs, om användaren skriver in någon annan bokstav än N W S E hur gör man då? har försökt men får inte riktigt till det, skulle vara nyttigt att veta inför kommande saker.
Du behöver skapa fler case-satser i din switch. Tänk också på att ”default” fångar upp alla övriga alternativ som inte exakt matchar en tidigare case-sats.