Java

Résolu
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010 - 29 avril 2009 à 11:40
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Derniè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

merci de me repondre

2 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
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 ..."

OoWORAoO
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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 !

Ou plus court pour un booléen : if(test)
0
Rejoignez-nous