Strano ciclo

di Anonimizzato13103 il
5 risposte
Perché in questo codice viene stampato anche il 10?? Non si dovrebbe fermare al 9??
public class Ciclo {
    public static void main(String args[]) {
        int i = 0;
        while (true) {
            i++;
            if((i%2) != 0)
            continue;
            System.out.println(i);
            if(i>=9)
            break;
        }
    }
}

5 Risposte

  • Allora nel ciclo fai:

    incrementa i;

    se i è dispari, prosegui all'iterazione successiva, saltando il resto del ciclo;

    stampa i;

    se i è maggiore o uguale a 9, esci dal ciclo.

    Quindi, quando fai i++, e i diventa 10, prima la stampi, e poi viene controllato se i è maggiore di 9

    quindi se non vuoi che venga visualizzato il 10, metti l if prima della stampa cosi:
    
    while (true) {
    
       i++;
                 
       if((i%2) != 0)
           continue;
                 
       if(i>=9)
            break;
               
       System.out.println(i);
    
    }
    
  • Ciao
    Ho un dubbio.... ma se si esce dal ciclo quando i è maggiore o uguale a 9, perché la i dovrebbe essere incrementata nuovamente??
  • Ha ragione Giuse90, infatti quando i vale 9, la prima condizione risulta soddisfatta pertanto viene eseguito il "contiunue" che fa terminare l'iterazione corrente senza preoccuparsi di verificare la seconda condizione (quella con il break), poi passa all'iterazione successiva dove i viene incrementato a 10, la prima condizione non risulta soddisfatta quindi stampa il 10, solo dopo viene verificata la seconda condizione eseguendo il break e terminando il ciclo.
  • Non so se Friz02 ha chiarito i dubbi di clari, in caso non l'avesse fatto..
    Nel codice postato da Friz02, la condizione per uscire dal ciclo (ovvero l'if), è messa dopo l'incremento la stampa della variabile i, di conseguenza,
    la i viene prima incrementata a 10,
    poi viene stampata
    e poi viene controllato se i è maggiore o uguale a 9.
    Semplicemente, per non far stampare il 10, l if va messo prima della stampa, come nel codice che ho postato io
    Spero di essere stato chiaro ciao
  • Chiarissimo !! grazie per il chiarimento ad entrambi!
Devi accedere o registrarti per scrivere nel forum
5 risposte