1. Flervalsoperatören:switch

Java har en annan intressant operatör som den ärvt från sin farfar (C++). Vi pratar om switchuttalandet. Vi skulle också kunna kalla det en flervalsoperatör. Det ser lite krångligt ut:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Ett uttryck eller en variabel anges inom parentes. Om uttryckets värde är value1börjar Java-maskinen att köras code1. Om uttrycket är lika med , value2hoppar exekveringen till code2. Om uttrycket är lika med exekveras value3det .code3

Exempel:

Koda Konsolutgång
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
High

2. breakuttalande iswitch

En viktig egenskap hos en switchsats är att programmet helt enkelt hoppar till den önskade raden (till det önskade kodblocket) och sedan exekverar alla kodblock till slutet av switch. Inte bara kodblocket som motsvarar värdet i , switchutan alla kodblock till slutet av switch.

Exempel:

Koda Konsolutgång
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
Low
Normal
High

Med en temperatur på 36 kommer programmet att gå in i switchsatsen, hoppa till och exekvera det första kodblocket (det första fallet), och sedan glatt utföra resten av kodblocken.

Om du bara vill exekvera ett kodblock - kodblocket som är associerat med det matchade fallet - måste du avsluta blocket med en breaksats;

Exempel:

Koda Konsolutgång
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

Du kan utelämna det breaksista fallet i satsen switch, eftersom det blocket är det sista med eller utan en break-sats.


3. Standardåtgärd:default

En annan viktig punkt. Vad händer om inget av fallen i listan switchmatchar uttrycket inom parentes?

Om ett matchande fall inte hittas, hoppas resten av satsen switchöver, och programmet kommer att fortsätta exekveringen efter det krulliga klammerparentesen som avslutar satsen switch.

Som sagt, du kan också göra ett switchuttalande som beter sig som den andra grenen i ett if-elseuttalande. För att göra detta, använd defaultnyckelordet.

Om inget av cases i switchblocket matchar uttryckets värde och switchhar ett defaultblock, kommer standardblocket att exekveras. Exempel:

Koda Konsolutgång
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Jämföra switchochif-else

Påståendet switchliknar något if-elsepåstående, bara mer komplicerat.

Du kan alltid skriva om koden för en switchsats som flera ifsatser. Exempel:

Kod med strömbrytare Koda med if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

Koden till vänster kommer att fungera precis som koden till höger.

En kedja av flera if-elsesatser är att föredra när en ifsats innehåller olika komplexa uttryck i varje separat fall.



5. Vilka uttryck kan användas i ett switchpåstående?

Alla typer kan inte användas som caseetiketter i ett switchuttalande. Du kan använda bokstaver av följande typer:

  • heltalstyper: byte, short, int,long
  • char
  • String
  • enumvilken typ som helst

Du kan inte använda några andra typer som fodraletiketter.

Exempel på att använda ett enuminuti ett switchuttalande:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

Obs: Om du använder en enuminsida i en switchsats behöver du inte skriva klassnamnet framför varje värde i etiketterna case. Det räcker med att bara skriva värdet.