Sto lavorando a un esercizio in cui un piccolo pezzo di codice basato su un ciclo for viene convertito per eseguire la stessa operazione con un ciclo while. La conversione è sbagliato per destinazione, e si presenta così:Conversione di un ciclo for con istruzione continue su ciclo while
int sum = 0;
for (int i = 0; i < 4; i++) {
if (i % 3 == 0) continue;
sum += i;
}
System.out.println(sum); // prints 3
Questo viene convertito in:
int i = 0, sum = 0;
while (i < 4) {
if (i % 3 == 0) continue;
sum += i;
i++;
}
System.out.println(sum); // will not print
Nell'esercizio, mi viene chiesto di spiegare il motivo per cui la conversione è sbagliato e quindi risolvere il problema. I miei pensieri sono:
Con il valore iniziale di i = 0, questo innescherà continuano immediatamente dopo aver inserito il ciclo volontà, dal momento che (0% 3 == 0) farà la if-statement true. Finché il valore iniziale è 0, questo eseguirà il ciclo, in modo da saltare una quantità infinita di volte. Ho provato a modificare il valore iniziale di i = 1, ma non viene stampato alcun importo. Poi ho provato ad incrementare i prima di eseguire la if-statement, e il programma stampa ora la somma 7. La domanda qui è; perché il programma non verrà stampato se ho incrementato dopo l'istruzione if, anche se il valore iniziale di i = 1 suggerisce (nella mia testa) che il programma debba funzionare correttamente?
Ho creato una tabella per ciascun programma per confrontare la somma.
La versione for-loop:
i = 0, sum + = i non preformato (continua), i ++
i = 1, sum = 1, i ++
i = 2, sum = 3, i ++
i = 3, sum + = i non preformato (continua), i ++
i = 4, i < 4 falso, cappio fermato
Il ciclo while versione:
i = 0, i ++, somma = 1
i = 1, i ++, sum = 3
i = 2, i ++, sum + = i non preformato (continuo)
i = 3, i ++, somma = 7
i = 4, i < 4 falso, cappio fermato
Nel ciclo while, sum + = i è preformato una volta in più rispetto al ciclo for . È questo il modo giusto per convertire il ciclo per il ciclo in un ciclo ?
int i = 0, sum = 0;
while (i < 3) {
i++;
if (i % 3 == 0) continue;
sum += i;
}
System.out.println(sum);
per 1. '3% 3' è zero –
A rigor di termini c'è un'altra differenza:' i' è ora visibile dal resto del blocco. Un equivalente di un costrutto 'for (int i = 0; ....) {}' è '{int i = 0; while (...) {}} '(si noti la coppia extra di parentesi graffe che racchiude sia la dichiarazione della variabile che il ciclo). – biziclop