Att välja: switch case

Switch case sats används när vi har ett antal alternativ att välja och när vi behöver utföra någon uppgift vid varje val. En switch-sats kan beskrivas som ett alternativ till många if..else-satser. Switch case satsen innehåller en variabel eller uttryck som måste vara av en uppräkningsbar typ, t.ex heltal, char eller String.
Notera att vi inte kan använda oss av long, float, double eller boolean i switch uttrycket.

Syntaxen för Switch case satsen ser ut så här:

switch (uttryck){
   case 1:
      // kodesats eller satser att exekvera 
      break;
   case 2:
      // kod sats eller satser att exekvera  
      break;
   case 3:
      // kod sats eller satser att exekvera 
      break;
   .
   .
   default:
      // kod sats eller satser att exekvera 
      break;
}

Switch case flödesdiagram

Några observationer:

  • Break användning är valfritt i switch case. När break påträffas ignoreras resten av case-fallen.
  • case behöver inte alltid ha order 1, 2, 3 och så vidare. Du kan också använda tecken exempelvis a, b, c och så vidare.
  • Uttrycket inuti switchen bör resultera i ett konstant värde annars skulle det inte vara giltigt.
  • Nästlade switch-satser är tillåtna, vilket innebär att du kan ha switch-satser inuti en annan switch. Men nästlade switch-satser bör undvikas eftersom det gör programmet mer komplext och mindre läsbart.

Exempel

  1. Skapa ett program som tar emot ett heltal från och med 1 till och med 5. Programmet ska returnera talets namn på spanska.
  2. Skapa ett program som tar emot en veckodag och returnerar dagens namn på spanska.
  3. Skapa ett program som tar emot två heltal och frågar användaren på räknesättet. Om användaren väljer multiplikation genom att välja första bokstaven i räknesättet, till exempel ”M” eller ”m”, ska programmet returnera resultatet.
  4. Givet ett personnummer ska programmet räkna ut om personnumret tillhör till en man eller en kvinna.
    Personnumret innehåller personens födelsetid, ett födelsenummer samt en kontrollsiffra. De enda uppgifter som kan utläsas ur ett personnummer är födelsetid och kön. Könet framgår av näst sista siffran i personnumret och är udda för män och jämn för kvinnor.
  5. Skapa ett program som simulerar en bankomat med ett initialt saldo på 1000 kronor. Bankomaten erbjuder följande meny med alternativ.
    1.- Se initialt saldo.
    2.- Sätt in pengar på kontot
    3.- Ta ut pengar från kontot
    4.- Stäng bankomaten
import java.util.Scanner;
public class NummerTillText {
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        System.out.print("Ange ett nummer från och med 1 till och med 5: ");
        int num = kb.nextInt();
        switch(num){
          case 1:
            System.out.println("uno");
            break;
          case 2:
            System.out.println("dos");
            break;
          case 3:
            System.out.println("tres");
            break;
          case 4:
            System.out.println("cuatro");
            break;
          case 5:
            System.out.println("cinco");
            break;
        }
    }
}

 

import java.util.Scanner;
public class Tolk {
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        System.out.print("Ange en veckodag på svenska: ");
        String dag = kb.nextLine().toUpperCase();
        switch (dag)
        {
          case "MÅNDAG":
            System.out.println("Lunes");
            break;
          case "TISDAG":
            System.out.println("Martes");
            break;
          case "ONSDAG":
            System.out.println("Miercoles");
            break;
          case "TORSDAG":
            System.out.println("Jueves");
            break;
          case "FREDAG":
            System.out.println("Viernes");
            break;
          case "LÖRDAG":
            System.out.println("Sábado");
            break;
          case "SÖNDAG":
            System.out.println("Domingo");
            break;
        }
    }
}

 

import javax.swing.JOptionPane;
public class Aritmetik {
    public static void main(String[] args) {
        double num1, num2, add, subtr, multi, divi;
        char operacion;
        
        num1 = Double.parseDouble(JOptionPane.showInputDialog("Ange det första tal: "));
        num2 = Double.parseDouble(JOptionPane.showInputDialog("Ange det andra tal: "));
        
        operacion = JOptionPane.showInputDialog("Välj räknesätt \n"
                + " addition \n subtraktion \n multiplication \n division").charAt(0);
        
        switch(operacion) {
            case 'a': 
            case 'A': 	add = num1 + num2;
                    JOptionPane.showMessageDialog(null, "Addition:\n" + num1 + " + " 
                            + num2 + " = " + add);
                    break;
            case 's': 
            case 'S': 	subtr = num1 - num2;
                    JOptionPane.showMessageDialog(null, "Subtraktion:\n" + num1 + " - " 
                            + num2 + " = " + subtr);
                    break;
            case 'm': 
            case 'M': 	multi = num1 * num2;
                    JOptionPane.showMessageDialog(null, "Multiplikation:\n" + num1 + " * " 
                            + num2 + " = " + multi);
                    break;
            case 'd': 
            case 'D': 	divi = num1 / num2;
                    JOptionPane.showMessageDialog(null, "Division:\n" + num1 + " / " 
                            + num2 + " = " + divi);
                    break;
            default : 
                    JOptionPane.showMessageDialog(null, "Fel, du valde fel räknesätt");
                    break;
        }
    }
}

 

import java.util.Scanner;

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

         var input = new Scanner(System.in);
         System.out.print("Ange ett personnumer med åtta siffror (ååmmdd-nnnn): ");
         String s = input.nextLine();
         switch(s.charAt(8)) {
            case '0': case '2': case '4': case '6': case '8':
               System.out.println("Kvinna");
               break;
            case '1': case '3': case '5': case '7': case '9':
               System.out.println("Man");
               break;
            default:
               System.out.println("Felaktigt personnummer");
         }
    }
}

 

import java.util.Scanner;
public class Bankomat {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        final int insaldo = 1000;
        int initiering;
        float insat,utsat,nusaldo;
        System.out.println("Välkommen till din bankomat. Vad vill du göra nu?\n"
        + "1. Se initialt saldo.\n"
        + "2. Sätt in pengar på kontot.\n"
        + "3. Ta ut pengar från kontot.\n"
        + "4. Stäng bankomaten.");
        initiering = kb.nextInt();
        switch(initiering) {
        case 1: 
            System.out.println("Belopp på kontot: " + insaldo + " kr");
            break;
        case 2: 
            System.out.print("Ange belopp som ska sättas in på kontot: ");
            insat = kb.nextInt();
            nusaldo = insaldo + insat;
            System.out.println("Belopp på kontot: " + nusaldo + " kr.");
            break;
        case 3:
            System.out.print("Ange belopp som ska tas ut från kontot: ");
            utsat = kb.nextInt();
            if(utsat > insaldo) {
                System.out.println("Du har inte så mycket pengar. Slut.");
            }
            else {
            nusaldo = insaldo - utsat;
            System.out.println("Belopp på kontot: " + nusaldo + " kr");
            }
            break;
        case 4: 
            break;
            }
    }
}