1. Introduzione
Capita spesso che non sia necessario eseguire tutte le iterazioni di un ciclo fino alla fine, ma che occorra uscirne in anticipo — ad esempio, non appena trovi l’elemento cercato. In altri casi bisogna saltare parte del lavoro e passare al passo successivo (per esempio, hai letto i dati e vuoi saltarne l’elaborazione). Questo è il controllo del flusso all’interno di un ciclo.
Gli operatori break e continue in Java servono proprio a questo. Vediamo come funzionano e a cosa tornano utili nei casi reali.
2. Operatore break: «Stop, macchina!»
Teoria e sintassi
L’operatore break si usa per uscire immediatamente da un ciclo, ovunque tu sia nel suo corpo. Non appena l’esecuzione del programma raggiunge break, il ciclo termina subito e l’esecuzione prosegue dalla prima riga di codice dopo il ciclo.
while (uslovie)
{
if (kakoe-to_uslovie)
{
break;
}
// il resto del codice del ciclo
}
Lo stesso vale per for e per do-while:
for (int i = 0; i < 10; i++)
{
if (kakoe-to_uslovie)
{
break;
}
// il resto del codice del ciclo
}
Esempio 1: verifica della primalità di un numero
Un numero è primo se è divisibile solo per 1 e per se stesso. Dobbiamo verificare la primalità di un numero: controllare tutti i potenziali divisori da 2 a n-1. Se risulta che il nostro numero è divisibile per un divisore, non ha senso continuare — il numero non è primo! Possiamo terminare il ciclo.
Esempio:
int number = 111;
boolean found = false;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
found = true;
System.out.println("Trovato un divisore " + i );
break; // Fermiamo il ciclo, non c'è più niente da cercare!
}
}
if (!found)
{
System.out.println("Nessun divisore trovato - il numero è primo.");
}
Esempio 2: validazione dell’input dell’utente
Scriviamo una piccola applicazione, ad esempio un questionario interattivo per la raccolta dei dati:
while (true)
{
System.out.print("Inserisci la tua età: ");
if (console.hasNextInt())
{
int age = console.nextInt();
if (age > 0)
{
System.out.println("Ottimo! La tua età: " + age);
break; // dati corretti — usciamo
}
else
{
System.out.println("Errore! Inserisci un'età positiva.");
}
}
else
{
System.out.println("Errore! Inserisci un numero.");
console.nextLine(); // scartiamo l'input non valido
}
}
Perché serve:
A volte è necessario far girare il ciclo all’infinito (o per molto tempo), finché l’utente non inserisce dati corretti. Non appena si verifica l’evento che ci soddisfa — applichiamo break e usciamo definitivamente dal ciclo.
3. Operatore continue: «Il prossimo, per favore!»
Teoria e sintassi
A differenza di break, l’operatore continue non termina l’intero ciclo, ma interrompe l’iterazione corrente: tutto ciò che è scritto dopo continue nel corpo del ciclo NON viene eseguito — si passa all’iterazione successiva.
for (int i = 0; i < 10; i++)
{
if (uslovie)
{
continue;
}
// questa parte verrà eseguita solo se continue non è scattato
}
Esempio 3: saltare i numeri pari
Immagina di dover stampare solo i numeri dispari di un intervallo. Quelli pari vanno saltati.
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // se il numero è pari — saltiamo tutto ciò che segue!
}
System.out.println("Numero dispari: " + i);
}
Cosa succede:
Quando i = 2, 4, 6... il ciclo incontra continue e passa subito all’iterazione successiva, senza eseguire System.out.println.
Visualizzazione passo per passo:
| i | i % 2 == 0 | Azione |
|---|---|---|
| 1 | false | stampa, nessun continue |
| 2 | true | continue, nessuna stampa |
| 3 | false | stampa, nessun continue |
| ... | ... | ... |
Gli operatori break e continue sono usati molto spesso. Praticamente in un ciclo su due. Ti piacerà lavorarci.
GO TO FULL VERSION