Operatoren
-
Hallihallo,
Kann mir jemand sagen, warum der folgenden Ausdruck der while-Schleife immer "false" ist:int x = 7; while(x++ == 8 || x == 7) {...}
Normal wird doch mit "++" der Wert von x um 1 erhöht, oder?
Was habe ich falsch gemacht?
-
x++ gibt zuerst x zurück, und erhöht erst danach x um 1. dh in dem vergleich wäre x=7, und nicht 8.
anders sähe es mit dem ausdruck ++x aus.
witzig an der sache ist, dass x auf der anderen seite vom or schon 8 ist, und somit auchd er test x==7 fehlschlägt.
-
Zuerst wird die 1. Bedingung ausgewertet. Da du das Postinkrement benutzt, wird der Wert erst nach dem Vergleich um 1 erhöht. Der Vergleich ergibt also false und danach wird x auf 8 erhöht. Da immer noch nicht feststeht, ob der Gesamtausdruck true oder false ergibt, muss auch die 2. Bedingung geprüft werden, was natürlich auch false ergibt (da x ja jetzt 8 ist). Folglich ist die gesamte Bedingung falsch.
-
zocker001 schrieb:
Hallihallo,
Kann mir jemand sagen, warum der folgenden Ausdruck der while-Schleife immer "false" ist:int x = 7; while(x++ == 8 || x == 7) {...}
Normal wird doch mit "++" der Wert von x um 1 erhöht, oder?
Was habe ich falsch gemacht?Hoi,
Du benutzt den Postfix Inkrement. Das heisst, x wird erst beim nächsten Zugriff auf x um 1 erhöht. Dieser momentane Zugriff im while-Kopf, hat also noch den Wert 7.
Da beim " x == 7 " der nächste Zugriff erfolgt, ist x = 8 und somit "false".
Ich würde Dir folgendes vorschlagen:int x = 7; if(x++ == 8 || x == 7) {...}
greetz
SLi
-
Vielen Dank für eure Hilfe, ihr seid echt klasse.
Jetzt geht mir ein Licht auf...