1. Operator wielokrotnego wyboru −switch

Operator wielokrotnego wyboru - przełącznik

Java ma jeszcze jeden interesujący operator odziedziczony po swojej babci (język C++). To jest operator switch. Jest również nazywany operatorem wielokrotnego wyboru. Wygląda trochę nieporęcznie:

switch(wyrażenie)
{
   case oznaczający1: kod1;
   case oznaczający2: kod2;
   case oznaczający3: kod3;
}

Wyrażenie lub zmienna jest wskazana w nawiasach. Jeśli wartość wyrażeń jest równa wartość1, rozpoczyna się wykonywanie kod1, jeśli jest równa wartość2, rozpoczyna się wykonywanie kod2, jeśli jest równa wartość3, rozpoczyna się wykonywanie kod3.

Przykład:

Kod Wyjście na wyświetlaczu
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Низкая");
   case 37: System.out.println("Нормальная");
   case 38: System.out.println("Высокая");
}
Высокая

2. Operator breakwswitch

Ważną cechą pracy switchjest to, że program po prostu przeskakuje do żądanej linii (do żądanego bloku kodu), a następnie wykonuje wszystkie bloki kodu do końca switch. Nie tylko blok kodu pasujący do wartości wewnątrz switch, ale wszystkie bloki kodu do końca switch.

Przykład:

Kod Wyjście na wyświetlaczu
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Низкая");
   case 37: System.out.println("Нормальная");
   case 38: System.out.println("Высокая");
}
Низкая
Нормальная
Высокая

Przy wartości temperatury 36 program przejdzie switchdo pierwszego bloku kodu - pierwszej linii, a po jego wykonaniu reszta bloków kodu zostanie po prostu wykonana.

Jeśli chcesz , aby w każdym przypadku wykonywany był tylko jeden blok kodu , do którego przeskoczyło wykonanie programu, musisz napisać instrukcję po tym bloku kodu break;

Przykład:

Kod Wyjście na wyświetlaczu
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Низкая");
      break;
   case 37:
      System.out.println("Нормальная");
      break;
   case 38:
      System.out.println("Высокая");
}
Низкая

switchNie możesz pisać w ostatniej opcji break, w każdym razie blok kodu jest tam ostatni.


3. Akcja domyślna:default

Kolejny ważny punkt. A co się stanie, jeśli żadna z proponowanych wartości w środku switchnie pasuje do wartości wyrażenia w nawiasach?

Jeśli nie zostanie znaleziony odpowiedni wariant, praca operatora switchzostanie zakończona, a program będzie kontynuował wykonywanie kodu zapisanego po nawiasach klamrowych operatora switch.

Jednak switchmożliwe jest, aby zachowanie było podobne do gałęzi else z if-else. Aby to zrobić, musisz użyć słowa kluczowego default.

Jeśli żadna caseopcja wewnątrz nie switchpasuje do wartości wyrażenia i jest switchzadeklarowana w default, jej kod zostanie wykonany. Przykład:

Kod Wyjście na wyświetlaczu
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Низкая");
      break;
   case 37:
      System.out.println("Нормальная");
      break;
   case 38:
      System.out.println("Высокая");
      break;
   default:
      System.out.println("Нужна скорая");
}
Нужна скорая

4. Porównanie switchvs.if-else

Operator switchjest nieco podobny do operatora if-else, tyle że jest jego bardziej złożoną wersją.

Zawsze możesz przepisać kod switchjako wiele if-s. Przykład:

Kod z przełącznikiem Kod z if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Низкая");
      break;
   case 37:
      System.out.println("Нормальная");
      break;
   case 38:
      System.out.println("Высокая");
      break;
   default:
      System.out.println("Нужна скорая");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Низкая");
}
else if (temperature == 37)
{
   System.out.println("Нормальная");
}
else if (temperature == 38)
{
   System.out.println("Высокая");
}
else
{
   System.out.println("Нужна скорая");
}

Kod po lewej stronie będzie działał dokładnie tak samo, jak kod po prawej stronie.

Łańcuch w postaci kilku if-elsejest lepszy w przypadku, gdy ifw warunku występują różne złożone wyrażenia w każdym indywidualnym przypadku.



5. Czego można użyć jako parametru dla y switch?

Nie wszystkie typy mogą być używane jako wartości w caseobrębie pliku switch. Teraz możesz używać literałów następujących typów:

  • typy całkowite: byte, short,int
  • typchar
  • typString
  • wartości dowolnego enumtypu

Żadne inne typy nie mogą być zapisywane jako wartości wewnątrz sprawy .

Przykład użycia enumwewnątrz switch:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Poniedziałek");
      break;
   case TUESDAY:
      System.out.println("Wtorek");
      break;
   case WEDNESDAY:
      System.out.println("Środa");
      break;
   case THURSDAY:
      System.out.println("Czwartek");
      break;
   case FRIDAY:
      System.out.println("Piątek");
      break;
   case SATURDAY:
      System.out.println("Sobota");
      break;
   case SUNDAY:
      System.out.println("Niedziela");
      break;
}

Notatka. Jeśli używasz enuminside switch, nie musisz pisać nazwy klasy przed każdą wartością w case. Wystarczy wpisać wartość.