Variablen Eine etwas andere if Abfrage !

Hallo ich wollte das abkürzen :
if ((x+1 == tx ^ x == tx ^ x-1 == tx) && (y+1 == ty ^ y == ty ^ y-1 == ty)){this.geheZufällig();};

in das :

if ((x^++x^--x)==tx && (y^++y^--y)==ty){this.geheZufällig();};

Fehler im Code gibt es nicht jedoch funktioniert der untere nicht!
 
man kann per ^ (XOR) nur integer oder booleans verknüpfen. Bei Integern wird dabei bitweise vorgegangen. Du möchtest wohl etwas anderes erreichen.
Zur Lesbarkeit: Deine "linken" Seiten der XORs sind disjunkt. D.h. du kannst auch einfach ein OR ( also || ) benutzen.
(Für mich das besser lesbar, weil häufiger benutzt.)
ich hätte die Bedingung eher durch Ungleichungen überprüft, also sowas wie: x+1 >=t && t >= x-1, Oh aber halt! Das ist symmetrisch!
D.h. man könnte auch in Betracht ziehen, den Betrag zu verwenden, also etwa: Math.abs(t-x) <= 1
 
Danke für eure Antworten!
Um denn Code etwas zu erklären! Es ist ein ausschnitt meiner Sprite.class!
x und y sind die Koordinaten vom Sprite!
tx und ty sind die Zielkoordinaten vom Sprite!
ich hab einen sprite der x = x+2 und y = y+2 geht!
jedoch möchte ich das er wenn er den Zielpunkt ereicht hat einen zufälligen neuen Punkt bekommt!

Wie gesagt der obere Code Funktioniert! Jedoch nicht der untere!
Und @JCODA ich hab extra mir xor ausgesucht da niemals zwei bzw. drei true sind!
 
Wenn der obere Ausdruck funktioniert dann nimm doch den. Der ist ja wenigstens noch halbwegs lesbar und verständlich. Den unteren versteht doch kein Mensch. Mit diesem inkrementieren/dekrementieren veränderst du die Variablen x und y ja auch und das überblickt doch keine Mensch was da abgeht. Und in einer Woche verstehst du das selber nicht mehr.

Edit: oder ist das jetzt nur dein sportlicher Ehrgeiz die ganze Abfrage möglichst kryptisch zu gestalten ?
 
Funktionieren würde es! Belasse es aber auf XOR da ich nicht will das es dort reinläuft wenn zwei bzw. drei stimmen!

Jedoch stimmt es x+1 >=t && t >= x-1 bringt ebenfalls das gewünschte Ergebnis!
Hab mir auch jetzt Math.abs() angeschaut würde auch gehen!
Danke dafür!

Macht es performancetechnisch einen unterschied ob ich x+1 >=t && t >= x-1 benutze oder Math.abs()?
 
(x+1 == tx ^ x == tx ^ x-1 == tx) && (y+1 == ty ^ y == ty ^ y-1 == ty)
(x^++x^--x)==tx && (y^++y^--y)==ty
Das sind nunmal zwei grundverschiedene Ausdrücke.
Guck dir dazu einfach mal diesen Teil an: (x^++x^--x)==tx
Dies ist äquivalent zu: (x^(x+1)^x)==tx
Dies kann wiederum vereinfacht werden zu: x+1==tx

Das heißt deine ganze untere Abfrage ist äquivalent zu: if(x+1==tx && y+1==ty)
und das ist nunmal ein vollkommen anderer Ausdruck als der in deiner ersten Zeile
 
Belasse es aber auf XOR da ich nicht will das es dort reinläuft wenn zwei bzw. drei stimmen!
Wie @JCODA bereits geschrieben hat, kann ja sowieso höchstens eine Bedingung zutreffen, so dass OR und XOR in diesem Fall gleichwertig sind. Falls aber drei Bedingungen zutreffen könnten, würde es nicht funktionieren, denn es gilttrue^true^true == true, so dass die Bedingung dann auch mit XOR unerwünschterweise erfüllt wäre.
 

Neue Themen


Zurück
Oben