Ciclo do...while in Java
Usa il ciclo do...while in Java per eseguire un blocco almeno una volta prima di verificare la condizione.
Il ciclo do/while è l'immagine speculare del ciclo while: esegue prima il corpo, poi controlla la condizione. Il risultato è un ciclo garantito di essere eseguito almeno una volta — anche se la condizione era falsa fin dall'inizio. Questa pagina tratta la sintassi, le differenze rispetto a while, quando usarlo e un problema comune di scope.
Sintassi
do {
// body — runs at least once
} while (condition);Nota il punto e virgola finale dopo while (condition) — facile da dimenticare, e il compilatore te lo farà notare.
Un esempio diretto equivalente al contatore while:
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);Output: 1 2 3 4 5 — uguale alla versione con while, ma il corpo viene sempre eseguito prima.
Quando la condizione inizia come falsa
È qui che do/while si differenzia da while:
int i = 10;
do {
System.out.println(i); // prints 10 once
i++;
} while (i < 5);Il corpo viene eseguito una volta, poi la condizione 10 < 5 è falsa e il ciclo termina. Un semplice while avrebbe saltato il corpo del tutto.
Quando usare do/while
Il caso d'uso classico è la validazione dell'input — è necessario leggere l'input prima per sapere se è valido:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
int n;
do {
System.out.print("Enter a positive number: ");
n = s.nextInt();
} while (n <= 0);Un altro utilizzo naturale sono i cicli di menu — si vuole sempre mostrare il menu almeno una volta:
int choice;
do {
showMenu();
choice = readChoice();
handle(choice);
} while (choice != 0);In entrambi i casi, esprimere il ciclo con un semplice while significherebbe duplicare il lavoro della prima iterazione fuori dal ciclo, o usare una variabile sentinella. do/while è più pulito.
Nota sullo scope
Una variabile dichiarata all'interno del corpo non è visibile alla condizione while:
do {
int x = readValue();
} while (x > 0); // compile error: x not in scopeDichiarala all'esterno:
int x;
do {
x = readValue();
} while (x > 0);Quanto spesso lo userai davvero
In pratica, do/while è il meno utilizzato dei tre cicli di Java. La maggior parte dei cicli sa se eseguire o meno prima della prima iterazione, quindi while e for li coprono. Ma quando "esegui una volta e poi magari di nuovo" è la descrizione naturale, do/while è l'espressione più chiara.
Un esempio pratico
Cosa c'è dopo
Il ciclo Java più comune è il ciclo for, che racchiude un contatore, una condizione e un passo di aggiornamento in un'unica intestazione ordinata.