1. L'operatore a scelta multipla:switch

Java ha un altro operatore interessante che ha ereditato dal suo nonno (C++). Stiamo parlando della switchdichiarazione. Potremmo anche chiamarlo operatore a scelta multipla. Sembra un po' ingombrante:

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

Un'espressione o una variabile è indicata tra parentesi. Se il valore dell'espressione è value1, la macchina Java avvia l'esecuzione code1. Se l'espressione è uguale a value2, l'esecuzione passa a code2. Se l'espressione è uguale a value3, code3viene eseguita.

Esempio:

Codice Uscita console
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. breakdichiarazione inswitch

Una caratteristica importante di un'istruzione switchè che il programma salta semplicemente alla riga richiesta (al blocco di codice richiesto) e quindi esegue tutti i blocchi di codice fino alla fine del file switch. Non solo il blocco di codice corrispondente al valore in switch, ma tutti i blocchi di codice fino alla fine di switch.

Esempio:

Codice Uscita console
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

Data una temperatura di 36, il programma inserirà l' switchistruzione, salterà ed eseguirà il primo blocco di codice (il primo caso), quindi eseguirà allegramente il resto dei blocchi di codice.

Se si desidera eseguire solo un blocco di codice , il blocco di codice associato al caso corrispondente, è necessario terminare il blocco con un'istruzione break;

Esempio:

Codice Uscita console
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

Puoi omettere breaknell'ultimo caso dell'istruzione switch, poiché quel blocco è l'ultimo con o senza un'istruzione break.


3. Azione predefinita:default

Un altro punto importante. Cosa succede se nessuno dei casi elencati nella switchcorrispondenza corrisponde all'espressione tra parentesi?

Se non viene trovato un caso corrispondente, il resto dell'istruzione switchviene ignorato e il programma continuerà l'esecuzione dopo la parentesi graffa che termina l' switchistruzione.

Detto questo, puoi anche fare in modo che switchun'istruzione si comporti come il ramo else in un'istruzione if-else. Per fare questo, usa la defaultparola chiave.

Se nessuno degli cases nel switchblocco corrisponde al valore dell'espressione e switchha un defaultblocco, verrà eseguito il blocco predefinito. Esempio:

Codice Uscita console
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. Confronto switcheif-else

L' switchaffermazione è in qualche modo simile a if-elseun'affermazione, solo più complicata.

Puoi sempre riscrivere il codice di switchun'istruzione come ifistruzioni multiple. Esempio:

Codice con interruttore Codice con 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");
}

Il codice a sinistra funzionerà esattamente come il codice a destra.

Una catena di più if-elseistruzioni è preferibile quando un'istruzione ifcontiene varie espressioni complesse in ciascun caso separato.



5. Quali espressioni possono essere utilizzate in una switchdichiarazione?

Non tutti i tipi possono essere utilizzati come caseetichette in switchun'istruzione. È possibile utilizzare letterali dei seguenti tipi:

  • tipi interi: byte, short, int,long
  • char
  • String
  • qualsiasi enumtipo

Non è possibile utilizzare altri tipi come etichette caso.

Esempio di utilizzo di un'istruzione enumall'interno di switchun'istruzione:

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

Nota: se utilizzi un'istruzione enumall'interno di switchun'istruzione, non è necessario scrivere il nome della classe davanti a ciascun valore nelle caseetichette. È sufficiente scrivere solo il valore.