W3docs

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:

  1. Una condizione che possa diventare falsa. Un true costante gira per sempre.
  2. Qualcosa nel corpo che modifica la condizione. Dimenticare di aggiornare i rende 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 ciclo
  • continue — salta il resto dell'iterazione corrente e rivaluta la condizione

Entrambi sono trattati in dettaglio in break e continue.

Un esempio pratico

java— editable, runs on the server

Cosa fare dopo

Un parente stretto di while è il ciclo do-while, che esegue sempre il corpo almeno una volta.

Esercitati

Pratica
Quante volte verrà stampato questo ciclo? int i = 5; while (i < 5) { System.out.println(i); i++; }
Quante volte verrà stampato questo ciclo? int i = 5; while (i < 5) { System.out.println(i); i++; }
Was this page helpful?