Problem z inkrementacją


(paranoise) #1

Witam. Uczę się Javy od niedawna i znalazłem ćwiczenie, w którym trzeba odpowiedzieć bez kompilacji co mi się wyświetli gdy napiszę mniej więcej:

public
class Inkrementacja
{
public static void main (String args[])
{
/1/ int x = 1, y;
/2/System.out.println (++x);
/3/System.out.println (x++);
/4/System.out.println (x);
/5/y = x++;
/6/System.out.println (y);
/7/y = ++x;
/8/System.out.println (++y);
}
}

No i nie kumam bo rozwiązanie jest 2, 2, 3, 3, 6. Tymczasem jakbym na to nie patrzył, to mi się wydaje, że skoro w piątce y = 4, to czwartą wyświetlaną liczbą powinno być 4. Poza tym w siódemce i ósemce musi być dodane po jeden do czterech, a nie do trzech żeby otrzymać 6. Jeśli ktoś by umiał mi to wytłumaczyć, to byłbym wdzięczny. Pozdrawiam.


(eskimosek) #2

++x - zwieksz wartosc o 1 przed wykonaniem
x++ - zwieksz wartosc o 1 po wykonaniu

1 x = 1
2 wypisz x = 1+x //wypisz 2
3 wypisz x i pozniej dodaj x=x+ 1 // wypisz 2 i dodaj po wypisaniu 1
4 wypisz x //wypisz 3
5 y= x++// y= 3 i nastepnie zwieksz x o 1 //x=4
6 wypisz y //wypisz 3
7 y=1+x // y = 5
8 wypisz y= 1+y // wypisz 6

Chodzi o kolejność y += ++x zwiększa o 1 wartość x i dodaje wartość x do y … y += x++ dodaje wartość x do y a następnie zwiększa x o wartość 1.