Kurs Java

Instrukcja Switch

Switch jest kolejną instrukcją warunkową, jaką mamy do dyspozycji Javie. Używamy tej instrukcji jeśli chcemy porównać zmienną warunkową ze zdefiniowanymi wartościami i na podstawie takiego porównania wykonać określony blok kodu. Instrukcja switch działa przede wszystkim ze zmiennymi typu byte, short, int, long, a także z nieopisywanymi przez nas jeszcze typami enum, String oraz liczbowymi typami obiektowymi. Skupmy się jednak na typach prostych. Wrócimy do tematu enumów i typów obiektowych dopiero po ich omówieniu w osobnym rozdziale.

Przed Javą 12

W tym paragrafie przedstawiamy instrukcję switch w postaci w jakiej istniała ona do czasu pojawienia się Javy 12. Przez wiele lat instrukcja ta wygladała w ten sposób:
switch (zmienna warunkowa) {
  case x:
    // Blok kodu, jeśli wartość x zgadza się ze zmianną warunkową
    break;
  case y:
    // Blok kodu, jeśli wartość y zgadza się ze zmianną warunkową
    break;
  default:
    // Blok kodu, gdy nie jest spełniony żaden z powyższych przypadków
}
Jak to działa:
  • Możemy określić od 1 do n przypadków case, jakie ma sprawdzić instrukcja switch.
  • Wartość case musi być stała lub literana. Nie możemy używać zmiennych.
  • Wszystkie wartości case muszą byc unikalne. W przypadku zduplikowanej wartości Java zgłosi błąd podczas kompilacji.
  • Każda instrukcja case może (ale nie musi) mieć instrukcję break. Jest ona opcjonalna. Gdy Java natrafi na instrukcję break, zakończy wykonanie instrukcji switch. Jeśli instrukcja break nie zostanie znaleziona, sprawadzany jest następny przypadek (następny case).

    Ciekawostka. To, że instrukcja break jest opcjonalna powoduje, że dosyć często zdarza się - szczególnie mniej doświadczonym programistom - pominąć ją przypadkowo. Doprowadza to do sytuacji, w której nie tylko wykonywany jest blok kodu, gdzie zmienna warunkowa jest równa wartości case, ale też następnego bloku i kolejnego (itd.), aż do momentu odnalezienia instrukcji break lub zakończenia instrukcji switch. Powoduje to powstawanie trudnych do odnalezienia, frustrujących błędów.
  • Jeśli żaden z przypadków nie zostanie wykonany (żadna wartość case nie będzie równa zmiennej warunkowej), wówczas zostanie wykonany blok default.
Tradycyjnie przechodzimy do omówienia przykładu:
int numberOfItems = 50;  
switch (numberOfItems) {   
    case 0: 
        System.out.println("Liczba itemów równa jest 0.");  
        break;  
    case 10:   
        System.out.println("Liczba itemów równa jest 10.");  
        break;   
    case 50:   
        System.out.println("Liczba itemów równa jest 50.");  
        break;   
    case 103:   
        System.out.println("Liczba itemów równa jest 103.");  
        break;  
    default:
        System.out.println("Liczba itemów jest inna niż przewidywana");  
}  
Zmienna numberOfItems ma wartość 50. Wartość tę podajemy na wejściu do instrukcji switch. Program sprawdza poszczególne przypadki:
  • Sprawdzane jest czy numberOfItems jest równe 0. Nie jest, więc program przechodzi dalej.
  • Sprawdzane jest czy numberOfItems jest równe 10. Nie jest, więc program przechodzi dalej.
  • Sprawdzane jest czy numberOfItems jest równe 50. Zgadza się. To jest właśnie wartość naszej zmiennej. Następuje zakończenie instrukcji switch.
A teraz zobaczmy przykład gdzie żadna z wartości nie pasuje:
int numberOfItems = 15;  
switch (numberOfItems) {   
    case 0: 
        System.out.println("Liczba itemów równa jest 0.");  
        break;  
    case 10:   
        System.out.println("Liczba itemów równa jest 10.");  
        break;   
    case 50:   
        System.out.println("Liczba itemów równa jest 50.");  
        break;   
    case 103:   
        System.out.println("Liczba itemów równa jest 103.");  
        break;  
    default:
        System.out.println("Liczba itemów jest inna niż przewidywana");  
}  
Zmienna numberOfItems ma wartość 15. Wartość tę podajemy na wejściu do instrukcji switch. Program sprawdza poszczególne przypadki:
  • Sprawdzane jest czy numberOfItems jest równe 0. Nie jest, więc program przechodzi dalej.
  • Sprawdzane jest czy numberOfItems jest równe 10. Nie jest, więc program przechodzi dalej.
  • Sprawdzane jest czy numberOfItems jest równe 50. Nie jest, więc program przechodzi dalej.
  • Sprawdzane jest czy numberOfItems jest równe 103. Nie jest, więc program przechodzi dalej.
  • Wyczerpane zostały wszystkie przewidywane przypadki i instrukcja kończy się wykonując kod w bloku default.

Przykład w programie

Teraz zobaczmy jak poprzedni przykład (ze zgodną wartością 50) będzie wyglądał po wpięciu go do naszego programu wprowadzonego w rozdziale Hello JavAPPa:
public class Start {

   public static void main(String[] args) {
       System.out.println("Hello JavAPPa");

        int numberOfItems = 50;  
        switch (numberOfItems) {   
            case 0: 
                System.out.println("Liczba itemów równa jest 0.");  
                break;  
            case 10:   
                System.out.println("Liczba itemów równa jest 10.");  
                break;   
            case 50:   
                System.out.println("Liczba itemów równa jest 50.");  
                break;   
            case 103:   
                System.out.println("Liczba itemów równa jest 103.");  
                break;  
            default:
                System.out.println("Liczba itemów jest inna niż przewidywana");  
        } 
   }
}
[Film bez dźwięku] [720p]

Od Javy 12

Począwszy od Javy 12 oprócz instrukcji switch zostały wprowadzone wyrażenia switch (w 12-ce dostępne w trybie preview). Finalna wersja wyrażeń (bez trybu preview) została udostępniona w najświeższej wersji Javy, w Javie 14. W kursie Kursu Javy 8 do 14 zawarliśmy kilka przykładów tego rozwiązania. Trzeba przyznać, że jest ono bardzo wygodne, ponieważ upraszcza kod i cechuje się większą elastycznością.
Linki
https://www.w3schools.com/java/java_switch.asp
Masz pytanie dotyczące tego rozdziału? Zadaj je nam!
Masz pytanie dotyczące prezentowanego materiału?
Coś jest dla Ciebie niejasne i Twoje wątpliwości przeszkadzają Ci w pełnym zrozumieniu treści?
Napisz do nas maila, a my chętnie znajdziemy odpowiednie rozwiązanie.
Najciekawsze pytania wraz z odpowiedziami będziemy publikować pod rozdziałem.
Nie czekaj. Naucz się programować jeszcze lepiej.
kursjava@javappa.com

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE