Buono sconto 4% su Toner e Cartucce agli utenti AZpoint. SU Iomiricarico.it!!
- Costrutti di programmazione avanzati: for,
do e
switch
- Il costrutto for
Completiamo il discorso dei cicli presentando for
e do.
Essi sono due cicli, equivalenti al while,
con delle caratteristiche particolari. Ecco la sintassi per il for,
nel caso d’utilizzo di una o 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 numeri partendo 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 al while.
Tra le parentesi tonde relative ad un ciclo for,
addirittura dichiariamo una variabile locale n
(che smetterà di esistere al termine del ciclo). Potevamo comunque anche
dichiararla prima del ciclo, nel caso fosse stata nostra intenzione utilizzarla
anche al di fuori di esso. In pratica, se nel while
utilizzavamo le parentesi tonde solo per l’espressione booleana, nel for
le utilizziamo per inserirci rispettivamente, prima l’inizializzazione di una
variabile, poi l’espressione booleana, ed infine l’aggiornamento che sarà
eseguito ad ogni iterazione. Da notare che questi tre istruzioni possono anche
essere completamente indipendenti tra loro.
Questo è il ciclo più utilizzato, vista la sua grande semplicità d’utilizzo.
Il ciclo while, è molto utilizzato quando non si conosce il numero 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 istruzioni da iterare siano
eseguite almeno una volta, dobbiamo utilizzare il ciclo do,
eccone la sintassi:
[inizializzazione;]
do {
corpo;
[iterazione;]
} while (terminazione);
in questo caso viene eseguito prima il blocco di codice, e poi, viene
valutata l’espressione booleana che si trova a destra della parola chiave while.
Ovviamente se l’espressione booleana è verificata, viene rieseguito il blocco
di codice, altrimenti termina. Notare il punto e virgola situato alla fine del
costrutto.
- Il costrutto switch
Il costrutto switch,
si presenta come alternativa al costrutto if.
A differenza di if,
non è possibile utilizzarlo in ogni situazione in cui c’è bisogno di
scegliere tra l’esecuzione di parti di codice diverse. Di seguito vi
presentiamo la sintassi:
switch (variabile di test) {
case valore1:
istruzione1;
break;
case valore2: {
istruzione2;
...........;
istruzionek;
}
break;
case valore3:
case valore4: {
//blocchi di codice opzionale
istruzionek+1;
...........;
istruzionej;
}
break;
[default: {
//clausola default opzionale
istruzionej+1;
...........;
istruzionen;
}]
}
In pratica, a seconda del valore intero che assume la
variabile di test, vengono eseguite determinate espressioni. La variabile di
test, deve essere di un tipo di dato compatibile con un intero, ovvero un byte,
uno short,
un char,
oppure, ovviamente un int.
Inoltre valore1...valoren
devono essere espressioni costanti e diverse tra
loro. Notare che la parola chiave break,
provoca l’immediata uscita dal costrutto. Se infatti, dopo aver eseguito tutte
le istruzioni che seguono un’istruzione di tipo case,
non è presente un’istruzione break,
verranno eseguite tutti gli statement che seguono gli altri case,
sino a quando non si arriverà ad un break.
Di seguito viene 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 è opzionale
stagione="non identificabile";
}
System.out.println("La stagione e’ "+stagione+".");
}
}
- Due importanti parole chiave: break
e continue
La parola chiave break,
è stata appena presentata come comando capace di fare terminare il costrutto switch.
Ma break,
è utilizzabile anche per far terminare un qualsiasi ciclo. Il seguente
frammento di codice, provoca la stampa dei primi dieci numeri interi:
int i=0;
while (true) //ciclo infinito
{
if (i>10)
break;
System.out.println(i);
i++;
}
Oltre al break,
esiste la parola chiave continue,
che fa terminare non l’intero ciclo, ma solo l’iterazione corrente. Il
seguente frammento di codice provoca la stampa dei primi dieci numeri, escluso
il cinque:
int i=0;
do
{
i++;
if (i==5)
continue;
System.out.println(i);
}
while(i<=10);
Sia break
sia continue,
possono utilizzare etichette (label) per specificare, solo nel caso di cicli
annidati, su quale ciclo devono essere applicati. Il seguente frammento di
codice stampa una sola volta, i soliti primi dieci 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++;
}
}
Esercizio 4.a)
Scrivere un semplice programma, costituito da un’unica classe, che
sfruttando esclusivamente un ciclo infinito, l’operatore modulo, un paio di
costrutti if,
un break ed un continue, stampi solo i primi 10 numeri pari.
Esercizio 4.b)
Scrivere un programma che
Utilizza una classe Persona che dichiara le variabili nome, cognome, età,
codice fiscale, indirizzo (scegliere i tipi di dati più appropriati).
Ricordarsi di utilizzare le convenzioni e le regole descritte in questo
modulo.
Utilizza una classe Principale che nel metodo main, istanzia due oggetti
chiamati persona1
e persona2
della classe Persona,
inizializzando per ognuno di essi i relativi campi sfruttando l’operatore dot.
Dichiarare un terzo reference (persona3)
che punti ad uno degli oggetti già istanziati. Controllare che effettivamente persona3
punti allo oggetto voluto, stampando i campi di persona3
sempre mediante l’operatore dot.
Commentare adeguatamente le classi realizzate e sfruttare lo strumento
javadoc per produrre la relativa documentazione.
Esercizio 4.c)
Scrivere un'applicazione che stampi i 256 caratteri del codice ASCII
con un ciclo (suggerimento: riguardare il capitolo precedente).
Claudio De Sio Cesari --- il linguaggio Object
Oriented Java --- http://www.claudiodesio.com
|