W3docs

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 scope

Dichiarala 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

java— editable, runs on the server

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.

Pratica

Pratica
Quante volte viene eseguito questo ciclo? int i = 10; do { System.out.println(i); i++; } while (i < 5);
Quante volte viene eseguito questo ciclo? int i = 10; do { System.out.println(i); i++; } while (i < 5);
Was this page helpful?