Instrukcja Switch
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ń:
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
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); }
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';