ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Comandi
Comandi
if
switch
fall-through
while
do-while
for
interruzioni
label
return
eccezioni
Stringhe/Array
Array
Caratteristiche
Creazione
Stringhe

<<< label >>>

Fin qui abbiamo visto che continue e break servono a interrompere o proseguire il ciclo che le contiene. In questo Java non è diverso dal C. È comque possibile interrompere più cicli annidati. Vediamo come.

All'inizio dei cicli si possono apporre label

Quando abbamo parlato dei case, abbiamo detto che si tratta di prefissi apposti ad un comando. In generale io posso etichettare qualsiasi comando, non solo dentro switch e non solo usando case.

Una label è un identificatore seguito da due punti

Se ho per esempio "a=1;" posso scrivere "prova: a=1;" Per etichetta posso usare qualsiasi identificatore: una sequenza di lettere e numeri che comincia per una lettera. In C le etichette possono andare ovunque perchè servono per marcare i "bersagli" del goto. In Java, non essendoci goto, hanno senso solo quando vengono apposti a cicli: for, while, do/while.

break e continue possono avere come parametro una label

In Java infatti è possibile usare le etichette come destinazione di un break o di un continue. Ovvero dopo break o continue posso specificare una etichetta, una di quelle che ho usato all'interno del programma, per marcare un ciclo.

Uscire o continuare cicli annidati

Che succede quando specifico che un break è seguito da una etichetta? Succede che il ciclo etichettato viene interrotto o continua, a secondo che si sia usato break o continue. Vediamo un esempio concreto.

Esempio di ricerca in più file
loop:
 while(<ci-sono-file>) {
    while (<ci-sono-righe>) {
        if(<non-c'è-in-questo-file>)
           continue loop;
        if(<trovato>)
           break loop;
     }
}

Supponiamo di stare eseguendo una ricerca di qualcosa in più file di testo. Dovremo pertanto fare un ciclo che elenca tutti i file su cui fare la ricerca. Per ogni file dovremo fare un altro ciclo in cui elenchiamo tutte le righe contenute. Abbiamo quindi due cicli annidati, quello esterno che enumera i file, e quello interno che esamina le righe di un file. Ora possono succedere due casi. Il primo in cui abbiamo trovato la stringa che cercavamo. In tal caso dobbiamo interrompere due cicli: quello che ci permette di scandire le righe e quello che scandisce i file. Un break non basta perchè interromperebbe solamente il ciclo di scansione delle righe del file, e infatti abbiamo scritto nell'esempio 'break loop'.

L'altro caso di interesse è quello in cui abbiamo scoperto che nel file che stiamo esaminando non c'è quello che cerchiamo (per esempio perchè abbiamo letto l'intestazione e abbiamo scoperto che le date non sono quelle necessarie). In tal caso dobbiamo andare al file successivo, non alla riga successiva, e quindi dobbiamo continuare il ciclo più esterno. infatti abbiamo usato 'continue loop;'.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com