Il costrutto condizionale switch è utilizzato quando si hanno un numero di opzioni (scelte) ed è necessario eseguire un'azione diversa in base ad ogni scelta.
Ecco come appare la sintassi del costrutto Switch in Java:
switch (variabile o espressione) {
case costante:
// Codice da eseguire
;
case costante:
// Codice da eseguire
;
default:
// Codice da eseguire
;
}
Solitamente il costrutto switch viene utilizzato con l'istruzione break anche se è opzionale. In questa guida vedremo prima un esempio senza il break e poi vedremo perché utilizzarlo.
Esempio di Switch in Java
public class EsempioSwitch {
public static void main(String args[]) {
int numero = 5;
switch (numero) {
case 1:
System.out.println("Il numero è uguale a 1");
case 5:
System.out.println("Il numero è uguale a 5");
case 10:
System.out.println("Il numero è uguale a 10");
default:
System.out.println("Altro valore");
}
}
}
Nell'esempio è stato passato come parametro una variabile, ma poteva essere anche passata un'espressione, come per esempio numero * 3
. Questo avrebbe fornito come risultato 30 e il numero non sarebbe entrato in nessuno dei casi specificato, ecco perché è sempre opportuno definire l'istruzione default
in modo da catturare eventuali casi non gestiti.
Diagramma di flusso
Come prima cosa, la variabile, valore o epsressione fornita come parametro allo switch, viene valutata e in base al risultato, il corrispondente blocco di codice viene eseguito.
L'istruzione break nello switch
L'istruzione break nello switch è opzionale ma viene comunque utilizzata nella maggioranza dei casi in cui viene usato lo switch. Come prima cosa però, vediamo quello che viene stampato se proviamo ad eseguire il seguente codice:
Nel programma abbiamo passato 5 come valore, quindi lo switch eseguirà il codice nel corpo del case 5
. Tuttavia, in assenza dell'istruzione break, vengono eseguiti anche tutti i casi successivi fino alla fine.
L'istruzione break serve quando si desidera che il flusso di esecuzione del programma esca dallo switch dopo che il primo blocco di codice corretto viene eseguito, ignorando i casi seguenti.
Eseguiamo ora lo stesso esempio con l'istruzione break:
Utilizzare il break nell'istruzione di default è opzionale, infatti in quel caso l'esecuzione del programma si interrompe autonomamente, ma in caso di utilizzo non si commette nessun errore.
Note sul costrutto Switch
All'interno di uno switch è possibile utilizzare solamente numeri interi (int), valori riconducibili a interi (byte, short, char), stringhe ed enums.
char ch = 'b';
switch (ch) {
case 'b':
// Codice...
}
L'ordine delle casistiche riportate in uno switch non è importante, i numeri interi possono essere specificati in qualsiasi ordine, non necessariamente ascendente.
Le espressioni fornite come parametro allo switch devono restituire un valore costante
, in caso contrario non funzionerà.
// Espressioni valide
switch (3 * 8)
switch (10 - 3)
// Espressioni non valide
switch (a + b)
switch (x + y)
L'annidamento dei costrutti switch è consentito, questo significa che si può utilizzare uno switch all'interno di un altro switch. Tuttavia questa pratica deve essere evitata dato che rende il programma più complesso e meno leggibile.