cs_limalima
Messages postés124Date d'inscriptiondimanche 31 août 2008StatutMembreDernière intervention16 décembre 2010
-
29 avril 2009 à 11:40
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
29 avril 2009 à 12:13
Bonjour,
j'ai un code dont je ne comprends pas le résultat:
public
static void main(String [] args) {
booleanx =
true ;
booleany =
false;
short z = 42;
if ((x <gras>false) || (y</gras>
true )) z++;//ici normalement comme la condition de if n'est pas verifié, alors z n'est pas incrémentée
if((z++ 44) || (++z 45)) z++;//ici on a incrémenté deux fois la valeur de z, donc z=44
System.
out .println(
"z = " + z);}
le résulatat est 46!!! alors que on a incrémenté z deux fois, ce qui fait 44
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 29 avril 2009 à 12:11
Salut,
le if de x ou y n'est pas un test mais une affectation regarde bien c'est :if((x false) || (y true)) z++; // z vaut 43 ici
et non :if((x false) || (y true)) z++;
par la suite il y a un test qui est fait avec une double incrémentation (le z++ 44 incrémente bien z et le ++z 45 également) donc 43 + 2 = 45 plus 1 avec l'incrémentation suite au if((z++ == 44) || (++z == 45)) qui est vrai donc z vaut bien 46
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 29 avril 2009 à 12:13
Salut,
Pour éviter ce genre de bug assez fréquent si on est étourdi et qu'on ne relis pas son code, ne faites pas : if (test true) mais : if (true test) ainsi le compilateur le dira tout de suite s'il manque un égal !