Menu

Ciclo for in Java: sintassi, esempi e il for-each migliorato

Il ciclo for di Java spiegato: il classico ciclo in tre parti, scorrere array e liste, cicli annidati, break e continue, e il for-each migliorato.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Il classico ciclo for in tre parti

Un ciclo for ripete un blocco un numero controllato di volte. La forma di Java racchiude tre elementi tra le parentesi, separati da punto e virgola:

Le tre parti vengono eseguite con un ritmo fisso:

  1. Inizializzazione (int i = 0): viene eseguita una volta, prima di tutto il resto.
  2. Condizione (i < 5): viene controllata prima di ogni passaggio; il ciclo si ferma quando è falsa.
  3. Aggiornamento (i++): viene eseguito dopo ogni passaggio, prima di ricontrollare la condizione.

Quindi questo stampa da i = 0 a i = 4. Il contatore i esiste solo all'interno del ciclo: dopo la parentesi graffa di chiusura non c'è più.

Contare in avanti, all'indietro e a passi

Le tre parti ti danno il pieno controllo del contatore:

i-- decrementa, i += 5 salta a passi di cinque: sono entrambi operatori aritmetici che fanno i conti sul contatore. La condizione decide quando fermarsi in base alla direzione: usa > quando conti all'indietro, < o <= quando conti in avanti.

Scorrere un array

Un ciclo con contatore si abbina in modo naturale a un array, usando .length come limite e i come indice:

Nota che colors.length è un campo senza parentesi: gli array sono speciali in questo. Una List usa invece list.size(). La condizione i < colors.length è corretta: gli indici vanno da 0 a length - 1, quindi usare < (e non <=) evita un errore di indice fuori intervallo.

Il ciclo for-each migliorato

Quando ti serve solo ogni elemento e mai l'indice, il for migliorato è più pulito e più difficile da sbagliare: non c'è un contatore con cui commettere errori di uno:

Leggi for (String color : colors) come "per ogni color in colors". Funziona sugli array e su qualsiasi cosa iterabile. Il compromesso: non hai l'indice e non puoi aggiungere o rimuovere elementi dalla collezione durante il ciclo (farlo lancia un'eccezione a runtime, ConcurrentModificationException). Usa il ciclo con contatore quando ti serve una di queste due cose.

Cicli annidati

Un ciclo dentro un ciclo è utile per griglie, tabelle e abbinamenti. Il ciclo interno viene eseguito per intero a ogni passaggio di quello esterno:

Questo stampa una tabellina 3x3. Quando l'annidamento si fa profondo, dai ai contatori nomi significativi (row, col) invece di i, j: ti evita di confondere l'uno con l'altro.

break e continue

break esce subito dal ciclo. continue salta il resto del passaggio corrente e passa direttamente all'aggiornamento:

Questo stampa 1 3 5 7. continue salta i pari; break chiude il ciclo quando i supererebbe 7. Nei cicli annidati, entrambi agiscono solo sul ciclo più interno, a meno che tu non usi un break con etichetta.

Attenzione ai cicli infiniti

Se la condizione non diventa mai falsa, il ciclo gira per sempre. La causa tipica è dimenticare l'aggiornamento o spostare il contatore nella direzione sbagliata:

for (int i = 0; i < 5; i--) {   // i diminuisce soltanto -> non arriva mai a 5
    System.out.println(i);
}

Un ciclo infinito voluto omette tutte e tre le parti, for (;;) { ... }, e si affida a un break interno per fermarsi. Usalo con parsimonia; di solito un while (true) si legge meglio.

Prossimo passo: i cicli while

Il ciclo for dà il meglio quando conosci il contatore in anticipo. Quando vuoi ripetere finché una condizione non cambia, e non hai un contatore chiaro, il ciclo while è più adatto. È l'argomento della prossima pagina.

Domande frequenti

Qual è la sintassi di un ciclo for in Java?

Un ciclo for in Java ha tre parti tra parentesi separate da punto e virgola: for (initialization; condition; update) { ... }. Per esempio for (int i = 0; i < 5; i++) { ... } fa partire i da 0, esegue il corpo finché i < 5 e aggiunge 1 a i dopo ogni passaggio. Tutte e tre le parti sono facoltative.

Qual è la differenza tra un ciclo for e un ciclo for-each in Java?

Il classico ciclo for usa un contatore esplicito, quindi controlli tu l'indice e la direzione: è l'ideale quando ti serve l'indice o vuoi saltare elementi. Il ciclo for-each migliorato, for (Type item : collection), percorre ogni elemento in ordine senza indice: è più pulito quando ti serve solo ogni elemento e mai la posizione. Il for-each non può modificare la struttura della collezione durante il ciclo.

Come si scorre un array in Java?

Puoi usare gli indici con un ciclo con contatore, for (int i = 0; i < arr.length; i++) { use arr[i]; }, oppure, quando l'indice non ti serve, un for-each: for (int x : arr) { use x; }. Gli array espongono la loro dimensione tramite il campo .length (senza parentesi), mentre le liste usano .size().

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA