Instrukcja Switch


Zagadnienia
  • Instrukcja switch
  • Wyświetlanie sformatowanych danych wyjściowych za pomocą instrukcji System.out.printf i String.format
  • Typowe błędy, których należy unikać
  • Przydatne narzędzia/oprogramowanie

  • Pakiet NetBeans

  • edytor kodu przykładowy


    Instrukcja switch

    Instrukcja switch umożliwia wybór rozgałęzienia w programie na podstawie wartości zmiennej lub wyrażenia. Instrukcja switch to struktura decyzyjna z wieloma opcjami. Umożliwia sprawdzenie wartości zmiennej lub wyrażenia, a następnie posłużenie się tą wartością do ustalenia, którą instrukcję (lub który zbiór instrukcji) wykonać.


    Przykład
    Zakładamy tu, że month jest zmienną typu int.

                switch (month)
                {
                    case 1:
                    System.out.println("Styczeń");
                    break;
                    case 2:
                    System.out.println("Luty");
                    break;
                    case 3:
                    System.out.println("Marzec");
                    break;
                    default:
                    System.out.println("Błąd: nieprawidłowy miesiąc");
                    break;
                }
                
    W tym przykładzie sprawdzaneWyrażenie to zmienna month. Jest ona sprawdzana, po czym podejmowane jest jedno z opisanych działań:
  • Jeśli wartość zmiennej month wynosi 1, program przechodzi do sekcji case 1: i wykonuje umieszczoną po tych słowach instrukcję System.out.println ("Styczeń"). Następnie instrukcja break powoduje wyjście programu z instrukcji switch.
  • Jeśli wartość zmiennej month wynosi 2, program przechodzi do sekcji case 2: i wykonuje umieszczoną po tych słowach instrukcję System.out.println ("Luty"). Następnie instrukcja break powoduje wyjście programu z instrukcji switch.
  • Jeśli wartość zmiennej month wynosi 3, program przechodzi do sekcji case 3: i wykonuje umieszczoną po tych słowach instrukcję System.out.println ("Marzec"). Następnie instrukcja break powoduje wyjście programu z instrukcji switch.
  • Jeśli wartość zmiennej month nie wynosi 1, 2 lub 3, program przechodzi do sekcji default: i wykonuje umieszczoną po tym słowie instrukcję System.out.println ("Błąd: nieprawidłowy miesiąc").

    Tę instrukcję switch można zastosować zamiast instrukcji if-else-if porównującej tę samą zmienną lub to samo wyrażenie z kilkoma różnymi wartościami. Wcześniej pokazana instrukcja switch działa jak następująca instrukcja if-else-if:
                if (month == 1)
                {
                System.out.println("Styczeń");
                }
                else if (month == 2)
                {
                System.out.println("Luty");
                }
                else if (month == 3)
                {
                System.out.println("Marzec");
                }
                else
                {
                System.out.println("Błąd: nieprawidłowy miesiąc");
                }
    
                


    Przykłady


            1 import java.util.Scanner;
            2
            3 /**
            4 Ten program ilustruje działanie instrukcji switch.
            5 */
            6
            25cf99c780a4a42042bf2a66d34da04b
            184 Rozdział 3. Struktury decyzyjne
            7 public class SwitchDemo
            8 {
            9 public static void main(String[] args)
            10 {
            11 int number; // Liczba wprowadzona przez użytkownika.
            12
            13 // Tworzenie obiektu klasy Scanner do pobierania danych z klawiatury.
            14 Scanner keyboard = new Scanner(System.in);
            15
            16 // Pobieranie od użytkownika jednej z liczb: 1, 2 lub 3.
            17 System.out.print("Wpisz 1, 2 lub 3: ");
            18 number = keyboard.nextInt();
            19
            20 // Określanie wprowadzonej wartości.
            21 switch (number)
            22 {
            23 case 1:
            24 System.out.println("Wpisałeś 1.");
            25 break;
            26 case 2:
            27 System.out.println("Wpisałeś 2.");
            28 break;
            29 case 3:
            30 System.out.println("Wpisałeś 3.");
            31 break;
            32 default:
            33 System.out.println("Wartość jest inna niż 1, 2 lub 3!");
            34 }
            35 }
            36 }
            


    UWAGA: Jeśli używasz wersji Javy starszej niż Java 7, sprawdzane Wyrażenie w instrukcji switch może być typu char, byte, short lub int. Od Javy 7 obsługiwany jest też typ String.


    Wyświetlanie sformatowanych danych wyjściowych za pomocą instrukcji System.out.printf i String.format



  • Ćwiczenia
    3.24. Uzupełnij poniższy szkielet programu. Dodaj instrukcję switch, która wyświetla „jeden” po wpisaniu przez użytkownika 1, „dwa” po wprowadzeniu 2 i „trzy” po podaniu 3. Po wprowadzeniu wartości innej niż 1, 2 lub 3 program powinien wyświetlać komunikat o błędzie.
    import java.util.Scanner;
    public class CheckPoint
    {
      public static void main(String[] args)
      {
        int userNum;
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Wpisz jedną z liczb " + "1, 2 lub 3: ");
        userNum = keyboard.nextInt();
        //
        // Tu umieść instrukcję switch.
        //
      }
    }
    


    3.25. Przekształć poniższą instrukcję if-else-if w instrukcję switch.
    if (selection == 'A')
    System.out.println("Wybrałeś A.");
    else if (selection == 'B')
    System.out.println("Wybrałeś B.");
    else if (selection == 'C')
    System.out.println("Wybrałeś C.");
    else if (selection == 'D')
    System.out.println("Wybrałeś D.");
    else
    System.out.println("Nie radzisz sobie za dobrze z literami, co?");
    


    3.26. Wyjaśnij, dlaczego poniższej instrukcji if-else-if nie można przekształcić w instrukcję switch. if (temp == 100) x = 0; else if (population > 1000) x = 1; else if (rate < .1) x = −1; 25cf99c780a4a42042bf2a66d34da04b 3.10. Wyświetlanie sformatowanych danych wyjściowych 189 3.27. Jaki błąd znajduje się w poniższej instrukcji switch? // Ten kod zawiera błędy!!! switch (temp) { case temp < 0 : System.out.println("Zmienna temp ma wartość ujemną."); break; case temp = 0: System.out.println("Zmienna temp jest równa zero."); break; case temp > 0 : System.out.println("Zmienna temp ma wartość dodatnią."); break; } 3.28. Co wyświetli poniższy kod? int funny = 7, serious = 15; funny = serious * 2; switch (funny) { case 0 : System.out.println("To zabawne."); break; case 30: System.out.println("To poważna sprawa."); break; case 32: System.out.println("To naprawdę śmieszne."); break; default: System.out.println(funny); }
    Przykładowe rozwiązania oraz komentarze do wybranych ćwiczeń i zadań


  • Rozwiązania do ćwiczeń z tej strony

    2.12. Nazwa 99bottles jest niedozwolona, ponieważ rozpoczyna się od cyfry. Nazwa r&d jest błędna, ponieważ znak & jest niedozwolony.
    2.13. Te nazwy nie są identyczne, ponieważ jedna rozpoczyna się wielką literą S, natomiast druga — małą literą s. Wielkość znaków w nazwach zmiennych jest istotna.
    2.14. a) short b) int c) 22.1, ponieważ jest przechowywany za pomocą typu double.
    2.15. 6.31E17
    2.16. Należy dodać F do literału liczbowego; oto przykład: number = 7.4F;
    2.17. true i false.
    2.18. a) char letter; b) letter = 'A'; c) System.out.println(letter);.
    2.19. Kod litery „C” to 67, kod litery „F” to 70, a kod litery „W” to 87.
    2.20. 'B' to literał znakowy.
    2.21. Nie można przypisać literału tekstowego do zmiennej typu char. Należy zastosować instrukcję: char letter = 'Z';