qualcuno chiama questo "codice elegante".. personalmente.. fa solo fare casino!
dovresti sapere che l'istruzione successiva ad un if viene eseguita se il contenuto della parentesi è true, ovvero se è uguale a 1; perciò l'espressione scritta in maniera un po' meno sintetica sarebbe:
if (i % 2==1)
i = i++
quindi se I diviso 2 da resto 1 (% è l'operazione modulo), ovvero I è dispari.
L'istruzione viene quindi eseguita se i è dispari!
qualcuno chiama questo "codice elegante".. personalmente.. fa solo fare casino!
dovresti sapere che l'istruzione successiva ad un if viene eseguita se il contenuto della parentesi è true, ovvero se è uguale a 1; perciò l'espressione scritta in maniera un po' meno sintetica sarebbe:
if (i % 2==1)
i = i++
cagata astronomica
l'equivalente "niubbo" è:
if (i % 2 != 0)
questo credo sia uno degli errori più gravi che mi siano capitati sul forum da un bel po di tempo, attento a queste cose.
L'operatore modulo (%) ritorna il resto di una divisione. Ad esempio 5 % 2 ritorna 1 (5 / 2 = 2 con resto 1). Viene utilizzato spesso per controllare se un intero è divisibile per un altro (come nel codice che hai riportato). Nel tuo esempio il codice controlla che l'intero non è divisibile per 2 (quindi dispari) e incrementa un contatore.
Un metodo più veloce (anche se di pochissimo) è quello di scrivere: