Il ciclo while in Java
Ripeti il codice in Java con il ciclo while: controllo della condizione e cicli infiniti.
Il ciclo while è il modo più semplice per ripetere un blocco di codice in Java. Finché la condizione è true, il corpo viene eseguito di nuovo. Quando la condizione diventa false, il ciclo termina e l'esecuzione prosegue dopo il ciclo.
Sintassi
while (condition) {
// body — runs while condition is true
}Un esempio minimo — contare da 1 a 5:
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}La condizione i <= 5 viene verificata prima di ogni iterazione. Quando i diventa 6, la condizione è falsa e il ciclo termina.
Le due cose da ricordare
Ogni ciclo while necessita di due elementi per terminare:
- Una condizione che possa diventare falsa. Un
truecostante gira per sempre. - Qualcosa nel corpo che modifica la condizione. Dimenticare di aggiornare
irende il ciclo infinito.
Un errore comune per i principianti:
int i = 1;
while (i <= 5) {
System.out.println(i);
// forgot i++ — loop runs forever
}Se il programma si blocca, cerca qui prima. Premere Ctrl+C nel terminale ferma un programma in esecuzione incontrollata.
L'altro classico errore off-by-one riguarda l'operatore di confronto. while (i <= 5) con i che parte da 1 esegue cinque iterazioni; while (i < 5) ne esegue solo quattro. Decidi se il valore al confine debba essere incluso prima di scrivere la condizione.
La condizione viene verificata prima
Se la condizione è falsa fin dall'inizio, il corpo non viene mai eseguito — nemmeno una volta:
int i = 10;
while (i < 5) {
System.out.println(i); // never executes
}Questa è la differenza fondamentale rispetto al ciclo do/while, che esegue sempre il corpo almeno una volta.
Quando usare while è la scelta giusta
Un ciclo for è preferibile quando conosci il numero di iterazioni in anticipo (for (int i = 0; i < 10; i++)). Il ciclo while è preferibile quando la condizione di arresto non è legata a un contatore — è legata a un cambiamento di stato e non sai in anticipo quante iterazioni saranno necessarie.
Lettura fino alla fine dell'input:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
while (s.hasNextLine()) {
String line = s.nextLine();
System.out.println("got: " + line);
}Riprovare fino al successo:
boolean connected = false;
int attempts = 0;
while (!connected && attempts < 5) {
connected = tryConnect();
attempts++;
}Elaborazione di una coda:
while (!queue.isEmpty()) {
Task t = queue.poll();
t.run();
}Cicli infiniti intenzionali
A volte si vuole che il ciclo giri per sempre — tipicamente in event loop, server o simulazioni — e si esce con un break:
while (true) {
String input = readCommand();
if (input.equals("quit")) {
break;
}
handle(input);
}while (true) è più idiomatico di while (1 == 1) o altri trucchi.
Uso di break e continue
All'interno di qualsiasi ciclo puoi usare:
break— esce completamente dal ciclocontinue— salta il resto dell'iterazione corrente e rivaluta la condizione
Entrambi sono trattati in dettaglio in break e continue.
Un esempio pratico
Cosa fare dopo
Un parente stretto di while è il ciclo do-while, che esegue sempre il corpo almeno una volta.