La struttura ciclica while in Java
La struttura `while` ti permette di realizzare un ciclo condizionato in Java, è uno degli strumenti fondamentali che puoi usare per ripetere un'operazione un certo numero di volte o fino a quando non si verifica una condizione.
while (condizione) {
// blocco di codice
}
Dove il blocco di codice può essere composto da una sola riga o da più righe.
Come funziona?
Il ciclo `while` continua a girare finché la condizione specificata rimane vera.
Ogni volta che il ciclo while esegue il blocco di codice compie un'iterazione. Quindi, un ciclo può essere composto anche da più iterazioni. Puoi vedere ogni iterazione come un singolo "giro" del ciclo.
In altre parole, prima di iniziare una nuova iterazione, la struttura while verifica se la condizione è ancora vera. E' un po' come se si chiedesse "Posso continuare?". Se la risposta è sì, esegue il blocco di codice associato e poi torna a chiedersi la stessa domanda. Se la risposta è no, si ferma e passa oltre.
Un esempio pratico
Ecco un esempio semplice di ciclo while.
int count = 0;
while (count < 5) {
System.out.println("Il valore di count è: " + count);
count++; // incrementa count di 1
}
Il codice inizia assegnando lo zero alla variabile`count`.
La condizione del ciclo è `count < 5`, quindi finché la variabile `count` è minore di 5, il ciclo continuerà a girare.
Ogni volta che il ciclo esegue, stampa il valore attuale della variabile `count` e la incrementa di 1 (`count++` significa "aggiungi 1 a `count`").
Quando il ciclo arriva a `count == 5`, la condizione `count < 5` non è più vera e il ciclo si ferma.
Ecco l'output del programma:
Il valore di count è: 0
Il valore di count è: 1
Il valore di count è: 2
Il valore di count è: 3
Il valore di count è: 4
Cosa accade se la condizione è falsa dall'inizio?
Se la condizione è falsa fin dall'inizio, il ciclo while non verrà mai eseguito, neanche una volta.
Ad esempio, guarda questo codice:
int count = 10;
while (count < 5) {
System.out.println("Non vedrai mai questo messaggio");
}
In questo caso, dato che la variabile `count` è già maggiore di 5, il ciclo non parte neppure.
Se vuoi che il ciclo compia sempre almeno un'iterazione, ti consiglio di usare la struttura ciclica do while.
Attenzione ai cicli infiniti! Se non cambi mai la variabile usata nella condizione, il ciclo potrebbe non finire mai, creando un ciclo infinito.
int count = 0;
while (count < 5) {
System.out.println("Questo ciclo non finirà mai...");
// oops, abbiamo dimenticato di incrementare count!
}
In questo caso la variabile `count` rimane sempre 0, quindi la condizione `count < 5` sarà sempre vera. Il ciclo non smetterà mai di girare. Questo potrebbe bloccare il programma!
Un altro esempio pratico
Supponi di voler sommare numeri fino a quando la somma totale non supera 100. Ecco come potresti farlo:
int somma = 0;
int numero = 1;
while (somma <= 100) {
somma += numero;
System.out.println("Ho aggiunto " + numero + ", somma attuale: " + somma);
numero++;
}
In questo codice la somma continua a crescere finché non supera 100.
Ogni volta che aggiungi un numero alla somma, il programma stampa il risultato corrente.
Quando la somma raggiunge o supera 100, il ciclo si ferma.
Ho aggiunto 1, somma attuale: 1
Ho aggiunto 2, somma attuale: 3
Ho aggiunto 3, somma attuale: 6
Ho aggiunto 4, somma attuale: 10
Ho aggiunto 5, somma attuale: 15
Ho aggiunto 6, somma attuale: 21
Ho aggiunto 7, somma attuale: 28
Ho aggiunto 8, somma attuale: 36
Ho aggiunto 9, somma attuale: 45
Ho aggiunto 10, somma attuale: 55
Ho aggiunto 11, somma attuale: 66
Ho aggiunto 12, somma attuale: 78
Ho aggiunto 13, somma attuale: 91
Ho aggiunto 14, somma attuale: 105
Differenze tra il ciclo while e il ciclo for
Il ciclo `while` è spesso utilizzato quando non conosci in anticipo quante volte dovrai eseguire il blocco di codice.
Questi cicli sono anche conosciuti come cicli indeterminati.
In altre parole, in un ciclo indeterminato la fine del ciclo dipende da una condizione che potrebbe cambiare in maniera imprevedibile. Quindi, spesso il numero di iterazioni (giri) che dovrà compiere il ciclo è indeterminato all'inizio.
Il ciclo `for` è, invece, utilizzato quando conosci fin dall'inizio quante iterazioni dovrà compiere il ciclo. Pertanto, il ciclo `for` non può gestire i cicli indeterminati.
Pertanto, puoi gestire i cicli indeterminati solo tramite una struttura ciclica `while` o `do-while`.
Il caso dei cicli determinati
Un ciclo è detto "determinato" se è noto fin dall'inizio il numero delle iterazioni che dovrà compiere.
Se conosci esattamente il numero di ripetizioni, puoi scegliere indifferentemente di usare un ciclo `for`:
for (int i = 0; i < 5; i++) {
System.out.println("Il valore di count è: " + i);
}
oppure un ciclo `while`
int count = 0;
while (count < 5) {
System.out.println("Il valore di count è: " + count);
count++; // incrementa count di 1
}
In entrambi i casi ottieni lo stesso output
Il valore di count è: 0
Il valore di count è: 1
Il valore di count è: 2
Il valore di count è: 3
Il valore di count è: 4
In conclusione, il ciclo `while` ti permette di realizzare sia i cicli determinati che indeterminati. E' più flessibile.
Il ciclo `for`, invece, ti consente di eseguire solo dei cicli determinati, quelli dove fin dall'inizio conosci il numero delle iterazioni che il ciclo dovrà compiere.
Quando usi il ciclo `while` fai però attenzione ai cicli infiniti e assicurati che ci sia un modo per "uscire" dal ciclo (loop) cambiando la variabile di controllo. Ti dò un consiglio: ogni volta che ci trovi a scrivere un ciclo, dovresti chiederti: "Quando e come finirà questo ciclo?" Fai in modo che ci sia sempre un'uscita di emergenza. Ad esempio, dopo un certo numero di iterazioni puoi forzare l'uscita dal ciclo indipendentemente dalla condizione di controllo.
Spero che questa spiegazione sia stata chiara! Se hai domande o vuoi vedere qualche altro esempio, scrivilo nei commenti qui sotto.