1. Flervalgsoperatøren:switch

Java har en annen interessant operatør som den har arvet fra sin bestefar (C++). Vi snakker om switchuttalelsen. Vi kan også kalle det en flervalgsoperatør. Det ser litt tungvint ut:

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

Et uttrykk eller en variabel er angitt i parentesen. Hvis verdien av uttrykket er value1, begynner Java-maskinen å kjøre code1. Hvis uttrykket er lik value2, hopper utførelse til code2. Hvis uttrykket er lik value3, code3blir det utført.

Eksempel:

Kode Konsollutgang
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. breakuttalelse iswitch

Et viktig trekk ved en switchsetning er at programmet ganske enkelt hopper til den nødvendige linjen (til den nødvendige kodeblokken) og deretter kjører alle kodeblokkene til slutten av switch. Ikke bare kodeblokken som tilsvarer verdien i switch, men alle kodeblokkene til slutten av switch.

Eksempel:

Kode Konsollutgang
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

Gitt en temperatur på 36, vil programmet gå inn i switchsetningen, hoppe til og utføre den første kodeblokken (det første tilfellet), og deretter muntert utføre resten av kodeblokkene.

Hvis du ønsker å kjøre bare én kodeblokk – kodeblokken som er knyttet til det matchede tilfellet – må du avslutte blokken med en breaksetning;

Eksempel:

Kode Konsollutgang
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 utelate breaki det siste tilfellet av switchsetningen, siden den blokken er den siste med eller uten en break-setning.


3. Standardhandling:default

Et annet viktig poeng. Hva skjer hvis ingen av tilfellene som er oppført i feltet switchsamsvarer med uttrykket i parentes?

Hvis en samsvarende sak ikke blir funnet, hoppes resten av setningen switchover, og programmet vil fortsette kjøringen etter at den krøllede klammeren avslutter setningen switch.

Når det er sagt, kan du også lage en switchuttalelse som oppfører seg som den andre grenen i en if-elseuttalelse. For å gjøre dette, bruk nøkkelordet default.

Hvis ingen av cases-ene i switchblokken samsvarer med verdien til uttrykket og switchhar en defaultblokk, vil standardblokken bli utført. Eksempel:

Kode Konsollutgang
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. Sammenligning switchogif-else

Utsagnet switchligner litt på et if-elseutsagn, bare mer komplisert.

Du kan alltid skrive om koden til en switchsetning som flere ifsetninger. Eksempel:

Kode med bryter Kode 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 til venstre vil fungere nøyaktig det samme som koden til høyre.

En kjede med flere if-elsesetninger er å foretrekke når en ifsetning inneholder ulike komplekse uttrykk i hvert enkelt tilfelle.



5. Hvilke uttrykk kan brukes i et switchutsagn?

Ikke alle typer kan brukes som caseetiketter i en switchuttalelse. Du kan bruke bokstaver av følgende typer:

  • heltallstyper: byte, short, int,long
  • char
  • String
  • hvilken som helst enumtype

Du kan ikke bruke andre typer som saksetiketter.

Eksempel på bruk av en enuminne i en switchuttalelse:

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;
}

Merk: Hvis du bruker en enuminne i en switchsetning, trenger du ikke skrive klassenavnet foran hver verdi i etikettene case. Det er nok å bare skrive verdien.