## Ciclo do .. while

Alcune celle del mondo sono gialle, ma i tuoi buggle non possono rimanere in queste celle. Scrivi il codice necessario per muoversi avanti finché il terreno non diventerà bianco. Per far questo usa il metodo `isGroundWhite()`.

L'inghippo sta nel fatto che molti buggle di questo mondo sono già sopra del terreno giallo ed a loro dispiace molto. Questo è il motivo per cui essi sono nel panico totale e si precipitano in avanti, anche i buggle che all'inizio non si trovano già su una casella gialla. In altre parole, anche se il pavimento è bianco nella prima cella dovete comunque muovervi nella casella successiva.

L'idea generale è qualcosa di simile a questo:

    vai avanti fintanto che non sei su una cella bianca

La difficoltà maggiore è che vogliamo che il contenuto del ciclo sia eseguito almeno una volta, anche se ci troviamo già su una cella bianca. Potrebbe essere facile farlo semplicemente copiando il contenuto del ciclo ed incollandolo prima di esso ma questo non sarebbe una bella idea: la duplicazione del codice è veramente una cattiva abitudine e voi dovreste sempre evitarla.

Code duplication easily turns code maintenance into a nightmare: reading the code becomes difficult as the reader must ensure that no slight difference exist between the versions. Debugging the code becomes difficult, as bugs have to be fixed in all versions. Actually, every modification of the code becomes difficult. So, really, you should always strive to not duplicate your code if you can avoid. And the good news is that you always can...

### Eseguendo il contenuto del ciclo almeno una volta

[!python]

Alcuni linguaggi hanno uno specifico costrutto per questo, ma non il Python. Nessun problema, possiamo farlo da soli! Un buon modo è creare una variabile dedicata ad indicare che stiamo eseguendo il ciclo per la prima volta oppure no, come di seguito:

    primaVolta = True
    while primaVolta or (altre condizioni):
      primaVolta = False
      (corpo del ciclo)

Quando `primaVolta` è true il contenuto del ciclo viene eseguito anche se le altre condizioni sono false. Una volta che il contenuto del ciclo è stato eseguito una volta, la variabile assume il valore false e non avrà più nessuna influenza sulla decisione di eseguire il corpo del ciclo oppure no.

[/!] [!java|scala|c]

In a `while` loop, the condition is evaluated before anything else, and if it's false, the loop body is never evaluated. Sometimes (although not that often), you would prefer the loop body to get evaluated at least once, even if the condition is initially false. For that, a variation of the `while` loop gets used, using the following syntax in [!thelang]. [!java|c]Do not forget the semi-column (;) after the condition, it is mandatory.[/!]

    do {
        azione()[!java];[/!]
    } while (condizione)[!java];[/!]

[/!]