Corso Java Base (7): switch, while e do-while
Istruzione switch
A differenza di if-then e if-then-else, l’istruzione switch può avere diversi possibili percorsi alternativi di esecuzione. Nell’esempio seguente, ProvaSwitch viene dichiarata una variabile giorno di tipo int.
Il codice visualizza il nome del giorno, in base al valore numerico del giorno, su cui si basa l’istruzione switch.
public class ProvaSwitch { public static void main(String[] args) { int giorno = 2; String nomeGiorno; switch (giorno) { case 1: nomeGiorno = "Lunedi"; break; case 2: nomeGiorno = "Martedi"; break; case 3: nomeGiorno = "Mercoledi"; break; case 4: nomeGiorno = "Giovedi"; break; case 5: nomeGiorno = "Venerdi"; break; case 6: nomeGiorno = "Sabato"; break; case 7: nomeGiorno = "Domenica"; break; } System.out.println(nomeGiorno); } }
In questo caso, viene stampato sullo standard output: Martedi
Un blocco switch può avere più etichette case alle quali vengono associate una o più istruzioni; una volta che viene selezionato il case che soddisfa la condizione, vengono eseguite le istruzioni ad esso associato.
Nell’esempio precedente la condizione verifica il valore della variabile di tipo int giorno. Essendo il valore della variabile mese uguale a 2, viene selezionata l’istruzione relativa al case 2, ovvero il giorno di Martedi.
Osserviamo che all’interno di ogni istruzione relativa ad un case è il comando break. Questo comando non è obbligatorio, ma comunque molto utilizzato nei blocchi switch, in quanto permette di uscire dal blocco delle istruzioni.
Spieghiamo meglio il funzionamento del comando break con un esempio, consideriamo il seguente codice:
int num = 3; switch (num) { case 1: System.out.prinln(“zero”); case 2: System.out.prinln(“tre”); case 3: System.out.prinln(“venti”); case 4: System.out.prinln(“ottanta”); }
Quello che accade è che il programma non esegue il primo e il secondo case (perché relativo al valore 1 e 2), mentre esegue l’istruzione relativa al case 3 (perché la variabile utilizzata dallo switch è num che ha valore 3). E’ importante capire che una volta che viene soddisfatto un case vengono eseguite anche tutte le istruzioni relative ai successivi case.
In questo esempio quindi l’output del programma sarebbe:
venti
ottanta
Per evitare ciò, e in particolare per eseguire solamente l’istruzione del case che soddisfa la condizione, si utilizza il comando break che esce dal blocco dello switch; pertanto modificando il codice dell’esempio precedente, inserendo i comandi break ad ogni istruzione:
int num = 3; switch (num) { case 1: System.out.prinln(“zero”); break; case 2: System.out.prinln(“tre”); break; case 3: System.out.prinln(“venti”); break; case 4: System.out.prinln(“ottanta”); break; }
Si ottiene il seguente output:
venti
Cosa accade se nessun case soddisfa la condizione? Ovviamente non accade nulla di particolare, semplicemente non viene eseguita nessuna delle istruzioni associate ai case. Spesso si ha l’esigenza di far eseguire un’istruzione nel caso in cui nessun case soddisfi la condizione. Per fare ciò si utilizza una speciale etichetta dello switch denominata default.
Ecco un esempio:
int num = 5; switch (num) { case 1: System.out.prinln(“zero”); break; case 2: System.out.prinln(“tre”); break; case 3: System.out.prinln(“venti”); break;  case 4: System.out.prinln(“ottanta”); break; default: System.out.prinln(“non trovato”); break; }
L’output sarà:
non trovato
Istruzione while e do-while
L’istruzione while esegue continuamente un blocco di istruzioni, finché una particolare condizione è vera.
La sintassi è la seguente:
while (espressione) { istruzioni }
L’espressione deve ritornare un booleano (come nel caso dell’if ), e finché questa espressione è vera, le istruzioni presenti all’interno del blocco del ciclo while vengono eseguite.
Vediamo un semplice esempio (ProvaWhile) che, utilizzando il ciclo while, stampa in output i numeri da 1 a 10.
Ecco un esempio:
class ProvaWhile { public static void main(String[] args){ int num = 1; while (num < 11) { System.out.println("numero: "+ num); num ++; } } }
In questo esempio il ciclo while controlla la condizione num < 11. Finché questa condizione è vera vengono eseguite le istruzioni all’interno del blocco.
Per cui essendo inizialmente num uguale a 1 viene eseguito il codice contenuto nel blocco che attraverso l’istruzione num++; ne aumenta il valore di uno. Il ciclo si ripete finché il valore assume il valore 11; a questo punto l’espressione non è più soddisfatta e le istruzioni contenute nel blocco non vengono più eseguite.
Per cui l’output è:
numero: 1
numero: 2
numero: 3
numero: 4
numero: 5
numero: 6
numero: 7
numero: 8
numero: 9
numero: 10
Il linguaggio di programmazione Java fornisce anche l’istruzione do-while, questa rappresenta una variante del while che serve a soddisfare una particolare esigenza.
Supponiamo di voler eseguire un ciclo while ma che l’istruzione contenuta all’interno del suo blocco debba essere eseguita almeno una volta, anche qualora la condizione del while non venga mai soddisfatta. Per questa particolare esigenza ci viene in aiuto il ciclo dowhile che viene espresso nel seguente modo:
do { istruzione } while (espressione);
Quello che accade è che per prima cosa viene eseguita l’istruzione relativa al blocco do, dopo di che viene controllata l’espressione (condizione del while). Qualora l’espressione risultasse vera, l’istruzione viene eseguita di nuovo, altrimenti non viene più eseguita; come detto, questo assicura che l’istruzione viene eseguita almeno una volta a prescindere dalla valutazione dell’espressione.
Nella prossima lezione continueremo con l’istruzione for.
Commenti recenti