Zrozumienie inkrementacji - podstawy

0

Wiele razy coś już programowałem na studia, głównie pierdołki ale tutaj mnie zagięła praktycznie podstawa może dlatego że miałem dlugą przerwe...

 
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
/*1*/ int x = 3, y;
	System.out.println(x);                  //3
	y = x++ - 1;
	System.out.println(y);                 //2
	System.out.println(y);                 //2
	System.out.println(y);                 //2
	System.out.println(y);                 //2
	System.out.println(y);                 //2
	System.out.println(y);                 //2
	y = x;
	System.out.println(y);                 //4
	System.out.println(y);                 //4
	System.out.println(y);                 //4
	System.out.println(y);                 //4
	}
}

Dlaczego po drugim wyświetleniu System.out.println(y); nie zmieniła się wartość. Ale już całkie dla mnie zagadaka ze po instrukcji y = x; jest wartość 4 a nie 3...

1
int x = 3;
System.out.println(++x); // 4

Preinkrementacja - zmienna od razu zwiększa wartość.

int x = 3;
System.out.println(x++); //3

Postinkrementacja - zmienna zwieksza wartość dopiero po użyciu.

Co do kodu:

y = x++ - 1;

W tym momencie x++ zostaje zwrócone nadal jako trójka. Po odjęciu jeden otryzmasz 2. To właśnie postinkrementacja. Przy kolejnym użyciu x ma już wartość 4, dlatego po przypisaniu do y masz czwórkę.

0

Na początku x = 3.
Następnie jak jest przypisane y?
y = 3 - 1. (y = x++ - 1)
Dlaczego 3, a nie 4? Bo tam jest postinkrementacja (nie wiem, czy w Javie jest preinkrementacja: ++x), co oznacza, że wartość zostanie zwiększona na samym końcu

W tym momencie y = 2, a x = 4 (bo poszła postinkrementacja).
Na koniec y = 4, bo x = 4 :)

Kluczem jest zrozumienie, kiedy wartość x w y = x++ -1 się zmieni.
A zmieni się dopiero jakby po tej instrukcji, czyli:

y = x++ - 1; //tutaj x ma jeszcze wartość 3
System.out.println(x); //tutaj ma już 4

Gdyby to była preinkrementacja (o ile Java to dopuszcza):
y = ++x - 1;
to wtedy sytuacja wygląda inaczej, bo najpierw zmniejszamy x (czyli teraz wynosi 2), a dopiero potem przypisujemy działanie do y, czyli 2 - 1.

0

Dlaczego po drugim wyświetleniu System.out.println(y);
println() nie zmienia wartości zmiennej, dlaczego więc sądzisz, że po drugim (czy jakimkolwiek innym) wywołaniu nagle wartość zmiennej ma się zmienić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1