java l'expression i++

Voir le sujet précédent Voir le sujet suivant Aller en bas

java l'expression i++

Message  didi le Ven 28 Mai 2010, 20:56

bonjour à tous

j'ai une petit souci avec l'expression i ++
j'ai essayé des example de cours (page 253 )
Code:

int i = 5;
        int a ;
        i = i++;
        System.out.println("i vaut : "+i);
        a = i++;
        System.out.println("a vaut : "+a);
        System.out.println("i vaut : "+i);


il afiiche
1) i vaut : 5
2) a vaut : 5
3) i vaut : 6

et si j'ai bien compris " i++ : i est incrémenté après avoir été utilisé "
c-à-d l'expression été fait après l'instruction ?
ex : l'expression i ++ (l'incrémentation de i ) était fait après l'instruction a = i++; ?


Code:

int i = 5;
int a;

        a = i++ + ++i;
        System.out.println("a vaut : "+a);
        System.out.println("i vaut : "+i);

    }
il affiche
a vaut : 12
i vaut : 7

12 = 6(i++) +(++i) 6 ? correcte ..?
et je ne sais pas pourqoui 7 ( car il a était incrementé 2 fois ..?)
merci d'avance

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: java l'expression i++

Message  mcd le Ven 28 Mai 2010, 21:56

"i++" est une expression, elle a donc une valeur.
Mais "i++" a aussi un effet : incrémenter "i"

Quelle est la valeur de "i++" ? La valeur AVANT incrémentation. D'abord on prend la valeur de "i" puis on "++"
Quelle est la valeur de "++i" ? La valeur APRES incrémentation. D'abord on "++" puis on prend la (nouvelle) valeur de i.

Il faut être très méthodique et rigoureux.

Détaillons "a = i++ + ++i;" si i=5
1. On est face à une assignation. Il faut donc évaluer l'expression à droite puis la donner à "a". Pour cela,
2. L'expression à évaluer est une somme. Il faut donc évaluer les 2 opérandes "i++" et "++i".
Dans quel ordre ? Java évalue toujours l'opérande de gauche PUIS celle de droite. Donc,
3. Il faut donc évaluer "i++". Cette expression a une valeur "5" et on incrémente "i" (qui vaut 6) mais l'évaluation est faite avant, "i++" vaut donc 5
4. On évalue à présent "++i". D'abord on incrémente et "i" passe à 7. On évalue alors "i" donc "++i" vaut 7.
5. Les 2 opérandes étant évalués, on peut faire la somme du point 2 : 5+7=12
6. l'expression à droite de l'assignation vaut donc 12, et on peut terminer le point 1 . a reçoit 12.
7. On a donc bien a=12 et i=7

Dis autrement.
a = i++ + ++i
devient a = ( (i++) + (++i) ) (pour montrer comment les priorités induisent les parenthèses)
devient a = ( (5) + (++i) ) (i passe à 6)
devient a = ( (5) + (7) ) (i passe à 7)
devient a = 12

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum