Anfängerfrage: If Bedingung

Hallo!

Ich möchte so eine If Bedingung realisieren, geht das so oder muss ich es umständlich mit && umschreiben?

Code:
0 <= pos.getY()+internalshipType <=  l

Wäre nett. wenn mir jemand das sagen könnte, den ich finde es niergends!

Danke!
 
Du kannst es allerdings auch mit "&" machen:

if(0<=pos.getY() & internalshipTyp <= I)
Bei einfachen "&&/&" ist es egal, bei "||/|" ist es dann wichtiger:

Java:
if(true && true) //true
if(false && true) //false
if(true && false) //false
if(false && false) //false
Du siehst also (hoffe ich mal), dass beide Bedingungen ausgewertet werden müssen, um bei "&&" zu einem Ergebniss zu kommen.

Anderst als bei ||. Das steht quasi für "und/oder", bedeutet also, dass mindestens eine Bedingung wahr sein muss:

Java:
if(true || true) //true
if(false || true) //true
if(true || false) //true
if(false || false) //false

Wenn du || oder && schreibst, dann bricht er z. B. in der 1 und 3. if des ||-Blocks ab.
Schließlich weiß er durch die trues schon, dass die Bedingung komplett true ist, da ja nur min. 1 davon wahr sein muss. Bei dem 2. und 4. weiß er noch nicht ob es true oder false ist, und wertet dementsprechend beide aus.
Wenn du nur | oder & verwendest, dann wertet er immer beide aus. In dem meisten Fällen bedeutet dass aber mehr bzw. unnötige Arbeit für die VM. Ich denke das gibt es dafür, falls eine booleanische Funktion ausgewertet ist, diese aber mehr macht als nur zu prüfen und dementsprechend true oder false zurückzugeben. In diesen Fall muss man wohl "|" oder "&" verwenden, um sicherzustellen, dass die Methode auch wirklich abgearbeitet wird.

Ach ja, und die Klammern in woody's Funktion sind unnötig, da die booleschen Operatoren die kleinste mathematische Priorität von allen mathe-zeug haben, dass ich kenne: Klammer, Wurzel/Quadrat, Multiplizieren/Dividieren, Addieren/Subtrahieren usw.
Braucht man erst bei vielen verschachtelten Abfragen/Vergleichen.


Ich hoffe das hast du jetzt verstanden.:)
 
Ich glaub ich hab mich ein bisschen zu unpräzise ausgedrückt:
(pos.getY()+internalshipType) soll ein Ausdruck sein.

Also Schema:
Code:
a <= b <= c

Code:
0 <= (pos.getY()+internalshipType) <=  l

Werde trotzdem euren Rat zur Kenntnis nehmen.
 
Ach so.
Dann musst du schon so machen:

if(0 <= (pos.getY() + internalshipType) && (pos.getY() + internalshipType) <= l)
Sonst würde die erste bool.-operation als booleanisch, die 2. aber als einfache Variable erkannt werden, wodurch er sich bei "boolean < integer" ect. natürlich nicht auskennen würde. Ich würde aber der Übersichtlichkeit halber eine Zeile vorher getY() mit isType. addieren lassen und in eine eigene kurze Variable schreiben lassen.
 
Wenn so eine Bedingung so kompliziert wird, hilft es meistens, sie in einzelne boolsche Werte zu zerteilen und die if-clause dann mit diesen zu bilden. Das wird zwar nicht unbedingt kürzer, aber um Welten lesbarer.
Java:
boolean largerThatNull = 0 <= (pos.getY() + internalshipType);
boolean lessThanOne = (pos.getY() + internalshipType) <= 1;

if (largerThanNull && lessThanOne) {
  //..
}

Gruß
Ollie
 
Zurück