Corso di Java

Istruzioni iterative per il controllo del flusso

 

Quando scriviamo un programma in un linguaggio di programmazione come Java, non facciamo altro che elencare le istruzioni che la macchina deve eseguire secondo un’opportuna sintassi, propria del linguaggio utilizzato.
Tali istruzioni vengono normalmente eseguite in sequenza, nell’ordine in cui sono state scritte; talvolta però, è necessario effettuare un controllo del flusso del programma, ad es. perché vogliamo che un’istruzione venga eseguita solo se si verifica una determinata condizione, oppure perché dobbiamo eseguire ciclicamente un’operazione in base al valore di una variabile di tipo intero…
Gli esempi che si possono portare sono praticamente infiniti e si presentano anche nei programmi più semplici.
Le istruzioni per il controllo del flusso possono essere suddivise in quattro categorie:

1. Istruzioni iterative;
2. Istruzioni condizionali;
3. Istruzioni per il controllo delle eccezioni;
4. Istruzioni di salto.

A partire da questa lezione esamineremo i costrutti offerti da Java per ognuna di esse.

Le istruzioni iterative servono per eseguire una sequenza di istruzioni un certo numero di volte o finché non si verifica un’opportuna condizione.
Il linguaggio Java offre 3 tipi di istruzioni iterative:

1. while;
2. do-while;
3. for.

L’istruzione while viene usata per eseguire continuamente un blocco di istruzioni finché una condizione rimane vera; la sua sintassi è:

while (espressione) {
    istruzioni
}


Innanzitutto viene valutata l’espressione, che deve restituire un valore booleano; se il valore restituito è true, allora vengono eseguite le istruzioni racchiuse tra le parentesi graffe, continuando a testare l’espressione e ad eseguire le istruzioni finché l’espressione non restituisce false.
Se l’espressione restituisce false alla prima valutazione, tutto il blocco viene saltato, cioè non viene mai eseguito, e il programma prosegue con l’istruzione successiva al while.

L’istruzione do-while è simile alla precedente, ma presenta una piccola (e fondamentale) differenza: l’espressione viene valutata dopo aver eseguito almeno una volta il ciclo.
La sintassi è:

do {
    istruzioni
} while (espressione);

Le istruzioni racchiuse tra parentesi graffe verranno perciò eseguite almeno una volta, indipendentemente dal valore iniziale dell’espressione (che deve restituire anch’essa un valore booleano).

L’istruzione for fornisce un modo compatto per ripetere un blocco di istruzioni un numero finito di volte.
La sintassi è la seguente:

for (inizializzazione; terminazione; incremento) {
    istruzioni
}


La parte di inizializzazione è costituita da un’istruzione che inizializza il ciclo (il caso più comune è l’assegnamento di un valore ad una variabile di tipo intero).
La terminazione è un’espressione booleana che determina quando terminare il ciclo: questa espressione viene valutata all’inizio di ogni iterazione, se vale false il ciclo termina.
Infine, l’incremento è un’espressione che viene invocata alla fine di ogni iterazione.
Non è necessario che siano presenti tutti e tre questi elementi.
Nel caso in cui manchi la parte di terminazione occorre inserire, tra le istruzioni del ciclo, un’istruzione che permetta di uscire dal ciclo in qualche modo.

Spesso il ciclo for viene utilizzato per scorrere gli elementi di un array o i caratteri di una stringa.

Esaminiamo il seguente esempio:

class TestIterazioni {
    public static void main(String[] args) {
       int a = 0;
       int b = 10;

       while (a <= b) {
             System.out.println("a = " + a + " b = " + b);
             a++;
             b--;
       }

            do {
       System.out.println("--");
       } while (a < b);

       String testo = "Esempio di utilizzo delle iterazioni.";
       char c;
      int i;

       for (i = 0; i < testo.length(); i++) {
             c = testo.charAt(i);
             System.out.println(c);
       }
    }
}

All’interno del while vengono stampati i valori delle variabili a e b finché, incrementando a e decrementando b, il valore di a diventa maggiore di b; nel ciclo do-while l’operazione di stampa della stringa “—“ viene eseguita una sola volta, perché l’espressione “a < b” è false.
Il ciclo for è più interessante: inizializza una variabile intera i (che viene incrementata ad ogni iterazione) e il ciclo viene eseguito fintanto che il valore di i è minore della lunghezza della stringa testo.
Il metodo charAt(int) è un metodo della classe String che ritorna il carattere della stringa che occupa la posizione indicata dal valore intero passatogli come parametro.


 

Torna all'indice Generale del corso di Corso di Java di Software Planet