For, do, switch
Il costrutto for
Completiamo il discorso dei cicli presentando fore do. Essi sono due cicli, equivalenti alwhile, con delle caratteristiche particolari. Ecco lasintassi per il for, nel caso d’utilizzo di unao più istruzioni da iterare:
for (inizializzazione; espr. booleana; aggiornamento)istruzione; for (inizializzazione; espr. booleana; aggiornamento) { istruzione1; ...........; istruzionen; }
Presentiamo un esempio che stampa i primi 10 numeripartendo da 10 e terminando ad 1:
class ForDemo{ public static void main(String args[]) { for (int n=10; n>0; n--) {System.out.println(n); } }}
N.B.: in questo caso notiamo che la sintassi èpiù compatta rispetto a quella relativa alwhile. Tra le parentesi tonde relative ad unciclo for, addirittura dichiariamo una variabilelocale n (che smetterà di esistere al terminedel ciclo). Potevamo comunque anche dichiararla prima delciclo, nel caso fosse stata nostra intenzione utilizzarlaanche al di fuori di esso. In pratica, senel while utilizzavamo le parentesi tonde solo perl’espressione booleana, nel for le utilizziamoper inserirci rispettivamente, prima l’inizializzazionedi una variabile, poi l’espressione booleana, ed infinel’aggiornamento che sarà eseguito ad ogniiterazione. Da notare che questi tre istruzioni possono ancheessere completamente indipendenti tra loro.
Questo è il ciclo più utilizzato, vista lasua grande semplicità d’utilizzo. Il ciclowhile, è molto utilizzato quando non si conosce ilnumero delle volte che le istruzioni devono essere eseguite,e soprattutto nei cicli infiniti, dove la sintassi èbanale:
while (true) { . . . . . . }
- Il costrutto do
Nel caso in cui si desideri la garanzia, che le istruzionida iterare siano eseguite almeno una volta, dobbiamoutilizzare il ciclo do, eccone la sintassi:
[inizializzazione;] do { corpo; [iterazione;] } while (terminazione);
in questo caso viene eseguito prima il blocco di codice, epoi, viene valutata l’espressione booleana che si trovaa destra della parola chiave while. Ovviamente sel’espressione booleana è verificata, vienerieseguito il blocco di codice, altrimenti termina. Notare ilpunto e virgola situato alla fine del costrutto.
- Il costrutto switch
Il costrutto switch, si presenta come alternativaal costrutto if. A differenza di if, nonè possibile utilizzarlo in ogni situazione in cuic’è bisogno di scegliere tra l’esecuzionedi parti di codice diverse. Di seguito vi presentiamo lasintassi:
switch (variabile di test) { case valore1:istruzione1; break; case valore2: {istruzione2;...........;istruzionek; } break; case valore3: case valore4: { //blocchi di codice opzionaleistruzionek+1;...........;istruzionej; } break; [default: { //clausola default opzionaleistruzionej+1;...........;istruzionen;}] }
In pratica, a seconda del valore intero che assume lavariabile di test, vengono eseguite determinate espressioni.La variabile di test, deve essere di un tipo di datocompatibile con un intero, ovvero un byte, unoshort, un char, oppure, ovviamente un int.Inoltre valore1...valoren devono essere espressionicostanti e diverse tra loro. Notare che la parola chiavebreak, provoca l’immediata uscita dal costrutto. Seinfatti, dopo aver eseguito tutte le istruzioni che seguonoun’istruzione di tipo case, non èpresente un’istruzione break, verranno eseguitetutti gli statement che seguono gli altri case, sino aquando non si arriverà ad un break. Di seguitoviene presentato un esempio:
class SwitchStagione { public static void main(String args[]) { int mese=4; String stagione; switch (mese) { case 12: case 1: case 2:stagione="inverno"; break; case 3: case 4: case 5:stagione="primavera"; break; //senza questo break si ha estate case 6: case 7: case 8:stagione="estate"; break; case 9: case 10: case 11: stagione="autunno"; break; default: //la clausola default è opzionalestagione="non identificabile"; }System.out.println("La stagione e’ " +stagione+ "."); }}
- Due importanti parole chiave: break econtinue
La parola chiave break, è stata appenapresentata come comando capace di fare terminare ilcostrutto switch. Ma break, èutilizzabile anche per far terminare un qualsiasi ciclo. Ilseguente frammento di codice, provoca la stampa dei primidieci numeri interi:
int i=0; while (true) //ciclo infinito { if (i>10) break; System.out.println(i); i++; }
Oltre al break, esiste la parola chiavecontinue, che fa terminare non l’intero ciclo, masolo l’iterazione corrente. Il seguente frammento dicodice provoca la stampa dei primi dieci numeri, escluso ilcinque:
int i=0; do { i++;if (i==5) continue; System.out.println(i); } while(i<=10);
Sia break sia continue, possono utilizzareetichette (label) per specificare, solo nel caso di cicliannidati, su quale ciclo devono essere applicati. Il seguenteframmento di codice stampa una sola volta, i soliti primidieci numeri interi:
int j=0; pippo: //possiamo dare un qualsiasi nome ad una //label while (true) { while (true){if (j>10)break pippo;System.out.println(j);j++; } }