W3docs

Istruzione continue in Java

Salta il resto dell'iterazione corrente in Java con l'istruzione continue, incluso il continue con etichetta.

continue è il cugino leggero di break. Mentre break dice interrompi completamente il ciclo, continue dice salta il resto di questa iterazione e inizia la prossima. Il ciclo continua a girare.

Questa pagina spiega come continue riprende l'esecuzione per ogni tipo di ciclo, la trappola del ciclo infinito nei cicli while, il suo utilizzo per filtrare elementi, quando preferirlo a una condizione if invertita e come influisce solo sul ciclo più interno.

Uso di base

for (int i = 0; i < 5; i++) {
  if (i == 2) {
    continue;
  }
  System.out.println(i);
}

Output:

0
1
3
4

Quando i == 2, continue salta direttamente al passo di aggiornamento del ciclo (i++), ignorando println. Il ciclo rivaluta quindi la sua condizione e procede con i == 3.

Come riprendono i cicli

Il comportamento dipende dal tipo di ciclo:

  • for — esegue l'espressione di aggiornamento, poi controlla la condizione
  • while — controlla immediatamente la condizione
  • do/while — controlla immediatamente la condizione (in fondo al ciclo)
  • for avanzato — passa all'elemento successivo

Un continue in un ciclo while che dimentica di avanzare lo stato può rapidamente diventare un ciclo infinito:

int i = 0;
while (i < 5) {
  if (i == 2) {
    continue;     // i never advances — infinite loop!
  }
  System.out.println(i);
  i++;
}

Questo è un errore classico. Incrementa prima del continue, oppure usa un ciclo for in modo che il passo di aggiornamento venga eseguito automaticamente.

Filtrare gli elementi

L'uso più comune di continue è "salta gli elementi che non mi interessano":

int[] nums = {3, 7, 2, 8, 5, 4};

for (int n : nums) {
  if (n % 2 != 0) {
    continue;          // skip odd numbers
  }
  System.out.println(n);
}

Output: 2 8 4.

continue vs. inversione della condizione

Spesso è possibile riscrivere un continue come un if che racchiude il resto del corpo:

for (int n : nums) {
  if (n % 2 == 0) {
    System.out.println(n);
  }
}

Funzionalmente identici. La scelta dipende dallo stile:

  • Usa continue quando ci sono più condizioni di salto; una serie di guardie early-out è più piatta rispetto a if profondamente annidati.
  • Usa un if contenitore quando la condizione di salto è semplice e il corpo è breve.
// continue style — easy to add another skip condition
for (User u : users) {
  if (u == null) continue;
  if (!u.isActive()) continue;
  if (u.isBanned()) continue;
  process(u);
}

continue salta solo un livello

Come break, continue agisce sul ciclo più interno che lo racchiude:

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    if (j == 1) continue;     // only skips inner iteration
    System.out.println(i + "," + j);
  }
}

Output:

0,0
0,2
1,0
1,2
2,0
2,2

Per usare continue sul ciclo esterno dall'interno di quello interno, usa un continue con etichetta — trattato in istruzioni con etichetta.

Un esempio completo

java— editable, runs on the server

Cosa c'è dopo

Combinando i cicli for, si ottengono i cicli annidati — la base per lavorare con griglie, tabelle e array bidimensionali.

Esercitati

Pratica
Cosa stampa questo ciclo? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
Cosa stampa questo ciclo? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
Was this page helpful?