LÄR DIG JAVA

Switch-satsen i Java: alternativ till if-satsen


Nyckelord: switch-satsen, else-if satsen, villkorssats

if-satsen i programmering

Den avslutande artikeln i det här kapitlet om if-satsen kommer behandla switch-satsen (engelska: switch-statement) i Java. En switch-sats kan man använda istället för if-satsen när man har en flervalssituation. Switch-satsen utför en av flera kodblock, likt else-if satsen, beroende på vilken av dess så kallade case-satser som är uppfyllda.

Vad är switch-satsen i Java ?

Switch-satsen i Java gör det, likt if-satsen, möjligt att välja vilken operation/operationer som programmet ska utföra, beroende på vilket villkor som är uppfyllt. Helt enkelt, switch-satsen skapar möjligheter att utföra specifika kodblock beroende på vilket villkor som är uppfyllt.

Hur fungerar switch-satsen i Java?

En switch-sats kan beskrivas som en kompakt version av if-satsen och är effektiv att använda när man ska välja mellan ett specifikt antal operationer. Sammanfattningsvis så fungerar switch-satsen som så att:

  • Switch-satsen är ett alternativ till if-satsen när man har en flervalssituation.
  • I dessa klassiska exempel använder vi byte, short, char, int, motsvarande omslagstyper, String eller enum. Nyare språkversioner har utökat switch med fler möjligheter.
  • Notera att vi inte kan använda oss av long, float, double eller boolean i switch uttrycket.

Om vi illustrerar switch-satsen med ett flödesschema får vi sambandet i figur 1 nedan.

Switch-satsen Java Else-if If-sats
Figur 1: Flödesschema som illustrerar switch-satsen i Java

Switch-satsen är ett alternativ till if-satsen när man har en flervalssituation.

Har skapar man en switch-sats i Java?

  • Switch-satsen skapar man genom att använda det reserverade ordet switch följt av ett uttryck inom parantes ( ).
  • Sedan specificeras alla alternativ med det reserverade ordet case följt av vilka operationer som programmet ska utföra om case-satsen har samma värde som uttrycket i switch-satsen.
  • En case-sats avslutar man med det reserverade ordet break.
  • Avslutningsvis, en switch-sats kan ha en default-gren, som skapas med det reserverade ordet default, det vill säga vad som ska ske om ingen av case-satserna är uppfyllda. Default-satsen kan, som du säkert inser, jämföras med else-satsen som vi såg på föregående sidor.

Syntax: Deklarera en switch-sats i Java

Om vi använder oss av punkterna vi såg ovan och skriver in det i kodeditorn får vi

switch (uttryck){

   case 1:
      // Operation / Flera operationer ... 
      break;
   
   case 2:
      // Operation / Flera operationer ... 
      break;

   case 3:
      // Operation / Flera operationer ... 
      break;
   default:
      // Operation / Flera operationer ... 
      break;
}

Vad är det för skillnader mellan switch-satsen och else-if satsen i Java?

switch passar när du jämför ett värde med flera alternativ. En kedja av if/else if kan däremot testa godtyckliga booleska villkor och intervall. Välj efter tydlighet; någon generell gräns på fem alternativ eller garanterad hastighetsskillnad finns inte.

Avslutningsvis, anpassa den lösning och använd de funktioner du känner dig mest bekväm med och som passar ditt program bäst. Det finns inget entydigt svar vilken av switch-satsen och else-if satsen som är bäst, utan det beror på flera faktorer som man får utvärdera från fall till fall.

Exempel: Switch-satsen i Java

Låt oss gå igenom ett par exempel på hur man skapar och använder en switch-sats i Java.

Exempel 1: Switch-sats jämfört med else-if sats för att konvertera skostorlek

Vi vill skriva ett program som givet en skostorlek för herrskor enligt US-storlek, skriver ut motsvarande storlek enligt EU-storlek. T.ex. US storlek 9 är samma som EU storlek 42. Vi tar inte med alla storlekar då det blir mycket att skriva, utan bara för att visa likheter/skillnader mellan en switch-sats och else-if satsen . Vill du se en tabell på motsvarande storlekar, hittar du det här: Shoe Size Conversion Chart. 

Switch-satsen

int usSize = 9;

switch (usSize){

   case 6:
      System.out.println("EU-storleken är: 39");
      break;

   case 7:
      System.out.println("EU-storleken är: 40");
      break;

   case 8:
      System.out.println("EU-storleken är: 41");
      break;

   case 9:
      System.out.println("EU-storleken är: 42");
      break;

   case 10:
      System.out.println("EU-storleken är: 43");
      break;

   case 11:
      System.out.println("EU-storleken är: 44");
      break;

   case 12:
      System.out.println("EU-storleken är: 45");
      break;

   default:
      System.out.println("Hittade inte storleken");
      break;
}

Else-if-satsen

int usSize = 9;

if(usSize == 6){
    System.out.println("EU-storleken är: 39");
}

else if(usSize == 7){
    System.out.println("EU-storleken är: 40");
}

else if(usSize == 8){
    System.out.println("EU-storleken är: 41");
}

else if(usSize == 9){
    System.out.println("EU-storleken är: 42");
}

else if(usSize == 10){
    System.out.println("EU-storleken är: 43");
}

else if(usSize == 11){
    System.out.println("EU-storleken är: 44");
}

else if(usSize == 12){
    System.out.println("EU-storleken är: 45");
}

else {
    System.out.println("Hittade inte storleken");
}

I båda fallen så får vi utskriften,  

EU-storleken är: 42

Vi ser i exemplet att switch-satsen och else-if satsen är väldigt lika varandra och vilken du väljer handlar mest om smak och tycke. Vidare, i exemplet ovan är variabeln usSize given, men en idé är att skriva ett program som frågar användaren om storleken och tar in informationen med t.ex. ett scanner-objekt, för att sedan köra programmet som konverterar från US-storlekar till EU-storlekar.

Exempel 2: Skapa en switch-sats som kontrollerar input från användaren

Vidare, låt oss ta ett ta ett till exempel som tar in information från användaren med hjälp av klassen scanner och sedan skriver ut en text.

// Importerar klassen Scanner
import java.util.Scanner;

public class exempel {
        public static void main(String[] args) {

            // Ber användaren skriv in info.
            System.out.println("Skriv den bokstav mellan a - d " +
                    "som du vill skriv ut i som versal" +
                    "Obs, endast små bokstäver");

            // Skapar ett scanner objekt
            Scanner sc = new Scanner(System.in);

            // Returnerar nästa tecken från scanner
            String userInput = sc.next();

            // Skapar switch-satsen
            switch (userInput){

            // Skapar olika case för switch-satsen
                case "a":
                    System.out.println("Användaren skrev in input: " 
                            + "A");
                    break;

                case "b":
                    System.out.println("Användaren skrev in input: " 
                            + "B");
                    break;

                case "c":
                    System.out.println("Användaren skrev in input: " 
                            + "C");
                    break;

                case "d":
                    System.out.println("Användaren skrev in input: "
                            + "D");
                    break;

            // Om användaren inte anger giltig input
                default:
                    System.out.println("Ej giltig input");
                    break;

            }
        }
}

Sammanfattning av switch-satsen i Java

En switch-sats i Java är en villkorssats som avgör ifall programmet ska utföra en operation, eller flera operationer.

  • En switch-sats är ett alternativ till if-satsen när man har en flervalssituation.
  • Villkorssatserna möjliggör att vi kan styra logiken i våra program.
  • I dessa klassiska exempel använder vi byte, short, char, int, motsvarande omslagstyper, String eller enum. Nyare språkversioner har utökat switch med fler möjligheter.

Vanliga frågor och svar: Switch-satsen i Java

Hur ska man använda switch-satsen i Java?

Switch-satsen är ett alternativ till villkorssatserna (if-satsen, else-satsen och else-if satsen) när man har en flervalssituation.

Hur skapar man en switch-sats?

En switch-sats skapas med det reserverade ordet "switch" följt av det uttryck man vill kontrollera inom parantes. Sedan specificeras alla alternativ med det reserverade ordet "case" följt av vilka operationer som programmet ska utföra om case-satsen har samma värde som uttrycket i switch-satsen. I den klassiska syntaxen avbryter break switch-satsen. Avslutningsvis används kommandot "default" för att, likt else-satsen, utföra operationer om ingen av case-satserna är uppfyllda.

Är switch-satsen bättre än else-if satsen?

Både switch-satsen och else-if satsen fyller samma funktioner. Använd de funktioner du känner dig mest bekväm med och som passar ditt program bäst. Det finns inget entydigt svar vilken av switch-satsen och else-if satsen som är bäst, och skillnaderna dem emellan är förhållandevis små.

Feedback CodeBean

Det här avsnittet visar klassisk switch med kolon och break. Moderna Java-versioner har också switch-uttryck, pilsyntax och mönstermatchning. Reglerna för möjliga typer beror därför på språkversion och syntax. Skostorlekarna är en förenklad övningstabell och kan skilja sig mellan tillverkare.