Dekrement/Inkrement

Status
Nicht offen für weitere Antworten.

Angelika_25

Bekanntes Mitglied
Hey Leute und zwar brauche ich endlich mal eine Erklärung ....
Die Regel gibt es dazu:
Steht der Inkrement-Operator vor der Variablen, wird die Variable erhöht und der neue um eins erhöhte Wert als Ergebnis zurückgegeben. Steht der Inkrement-Operator hinter der Variablen, wird die Variable erhöht und der ursprüngliche noch nicht um eins erhöhte Wert als Ergebnis zurückgegeben.
An sich ok, aber ich mache immer wieder Fehler, wenns dann in der Praxis dran kommt.

Ich hab hier drei kleine Codebeispiele dafür:
Code:
int a=10;
a=a++;
a++;
System.out.println("a= "+a);
//---------->a=11 kommt raus

Hier heißt es doch, dass in der zweiten Zeile a um eins erhöht wird, aber noch nicht ausgegeben wird. Wie wird dann in der dritten Zeile gerechnet? Ist doch im Prinzip das Gleiche wie die zweite, oder? a++ bedeutet doch: a=a+1, oder?

Code:
int a =10;
a=++a;
a++;
System.out.println("a= "+a);
//--------->a=12 kommt raus

Hier heißt es doch, dass in der zweiten Zeile der Wert um eins erhöht wird und auch ausgegeben wird, also sind wir in der zweiten Zeile schon bei dem Wert 11, aber in der dritten Zeile wird es zwar nochmal um eins erhöht, aber doch eigentlich nicht ausgegeben?

Code:
int a =1, b=0, c=0;
b=++a;
c=a++;
System.out.println("a= "+a+"\nb= "+b+"\nc= "+c);
//--------->a=3, b=2, c=2 kommt raus

Hier heißt es doch, dass b in der zweiten Zeile um eins erhöht wird und das auch ausgegeben wird (besser gesagt gespeichert wird bis zur Ausgabe), in der dritten Zeile wird c um eins erhöht, aber es wird noch nicht ausgegeben.

Es tut mir Leid wenn ich jetzt hier wahrscheinlich viele verwirre, aber ich will das jetzt endlich mal kapieren und wenn ich rumgoogle, dann find ich immer nur die Regeln, aber die weiß ich ja, kann sie nur nicht umsetzen :(.
Würde mich freuen wenn mir bald jemand antworten würde.......
 

Verjigorm

Top Contributor
vielleicht mal ein einfacheres Beispiel, was mir mal geholfen hat, das Problem mit dem vorher/nachher Inkrementieren zu verstehen:

Code:
     int a = 0; // a ist 0
		System.out.println("a = "+ a++); //Ausgabe von a++
		a = 0; // a wieder 0 setzen
		System.out.println("a = "+ ++a); //Ausgabe von ++a

Ausgabe:
a = 0
a = 1
 

Verjigorm

Top Contributor
hm ich glaub ich kann das nicht verständlich erklären :D

ich hoffe ich erklärs jetzt nicht falsch:

a = a++ :

du weisst quasi dem "neuen a" das "alte a++" zu
da der inkrement von a++ aber später ausgeführt wird,
passiert quasi folgendes: "neues a" = "altes a" UND "altes a" um eins erhöhen
das "alte a" ist aber quasi verloren, weil es nur noch das "neue a" gibt,
deswegen bleibt a = 10

ich hoffe das ist so richtig erklärt, ansonsten haut mich :)
 

Backwardsman

Bekanntes Mitglied
Code:
int a =1, b=0, c=0;
b=++a; // a wird vor der zuweisung erhöht
// an dieser stelle ist a=2 und b=2
c=a++; // a wird nach der zuweisung erhöht
// an dieser stelle ist a=3, aber c=2
System.out.println("a= "+a+"\nb= "+b+"\nc= "+c);

... was ich allerdings komisch finde ist der ausdruck
Code:
a = a++;
ich kann mir gerade nicht erklären, warum in dieser zeile a nicht erhöht wird?!
 

ARadauer

Top Contributor
a++ bedeutet doch: a=a+1, oder?
ja aber a=a++; ist nicht a++
der wert von a wird gemerkt, dann wird a erhöht und der wert der gemerkt wurde 10 wird a zugewiesen.


Hier heißt es doch, dass in der zweiten Zeile der Wert um eins erhöht wird und auch ausgegeben wird, also sind wir in der zweiten Zeile schon bei dem Wert 11, aber in der dritten Zeile wird es zwar nochmal um eins erhöht, aber doch eigentlich nicht ausgegeben?
wie ausgeben? in der zweiten zeile wird überhaut nichts ausgegeben. es wird nur zugewiesen bzw erhört ausgeben tust du mit System.out.println.

a wird erhöht und a zugewiesen, dann wird a nochmal erhöt = 12


Hier heißt es doch, dass b in der zweiten Zeile um eins erhöht wird und das auch ausgegeben wird (besser gesagt gespeichert wird bis zur Ausgabe), in der dritten Zeile wird c um eins erhöht, aber es wird noch nicht ausgegeben.

a = 1;
du erhöst a auf 2 und weißt es b zu also 2
a ist nun 2
du weist es c zu, als c ist 2 und erhöst a auf 3

3 2 2 passt genau

ps: wahrscheinlich ist es für die schule, aber sowas a=a++; ist mist!!! ++a verwende ich auch ganz ganz selten. normalerweise a++ und gut
 
S

SlaterB

Gast
a = a++;

->

int c = a;
a++;
a=c;


das a wird erst erhöht, nachdem der Wert der Zuweisung bestimmt wurde,
da am Ende a mit diesem Wert überschrieben wird, bleibt a beim alten Wert
 

Angelika_25

Bekanntes Mitglied
also so langsam verstehe ich mehr :), ja es ist für die schule und ich finde es auch viel zu kompliziert, denn es gibt einfachere möglichkeiten find ich.....
also das dritte Beispiel von mir hab ich nun verstanden!!
Aber jetzt nochmal zu dem ersten Beispiel:
a=a++;
der wert von a wird gemerkt, dann wird a erhöht und der wert der gemerkt wurde 10 wird a zugewiesen.
----->also ist quasi das erste a da 10, aber das hinter dem = 11, oder?
Ich benutze ja dann die 10 für das a++, oder? Aber das ist doch wieder Post-Inkrement, oder? Das heißt doch, ich addiere zu der 10 eine 1, also 11, aber merke mir das irgend wie nur?
Versteht ihr was ich meine? ;)
 

ARadauer

Top Contributor
ja aber dann weißt du dir 10 von vorher dem a wieder zu

wie slater geschrieben hat:

a = a++;

->

int c = a;
a++;
a=c;
 
G

Guest

Gast
Also was du dir erstmal grundlegend vor Augen führen musst ist was diese dinger Bedeuten:

a++ => a = a + 1
++a => a = a + 1

Damit weisste schon mal, dass die beiden grundsätzlich das gleiche machen. Der einzige Unterschied ist der Zeitpunkt wann etwas passiert. a++ erhöht a um 1 nachdem die umschließende Operation durchgeführt wurde. ++a dagegen erhöht a davor, daher:

Code:
int a=10;  // a == 10
a=a++;    // Heisst eigentlich a = a = a + 1 dabei wird a der Wert a zugewiesen weil eben a++ erst nach 
               // der Zuweisung erfolg (++a würde hier dann 12 ergeben) und das a + 1 geht unter
a++;        // Heisst a = a + 1, hier geht die Zuweisung nicht unter und a wird um 1 erhöht
System.out.println("a= "+a); 
//---------->a=11 kommt raus

Code:
int a =10;     // a == 10
a=++a;        // Heisst a = a = a + 1 (wie oben) ABER ++a führt seine "Operation" vor der Zuweisung aus, man
                   // müsste genau also schreiben a = (a = a + 1)
a++;           // Hier wird a nochmal normal (wie vorheriges Beispiel) um 1 erhöht.
System.out.println("a= "+a); 
//--------->a=12 kommt raus

Code:
int a =1, b=0, c=0;     // a == 1, b == 0, c == 0
b=++a;                     // Siehe obiges Bsp. 2 Erhöhung vor Zuweisung => b == 2
c=a++;                     // Siehe Beispiel 1 oben Zuweisung vor Erhöhung ABER a ist von ++a in der Zeile vorher
                                // auf 2 erhöht worden also => c == 2 da a von vorher 2 ist
System.out.println("a= "+a+"\nb= "+b+"\nc= "+c); 
// Da in der letzten Zuweisung c den Wert zugewiesen bekommt (nicht wie im ersten Beispiel a die Zuweisung von a
// bekommt) geht hier das a++ nicht unter (wird nur für c nicht beachtet) und erhöht a dann um 1 auf 3
//--------->a=3, b=2, c=2 kommt raus

Hoffe ich hab mich verständlich ausgedrückt :D
 

Angelika_25

Bekanntes Mitglied
Ja ich denke ich habe es verstanden, muss zwar noch etwas länger überlegen, aber das war jetzt sehr gut erklärt :). Vielen vielen Dank...........dauert bei mir manchmal eben etwas länger ;)


Liebe Grüße
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben