FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Bedingungen in Java

Bedingungen in Java 2004-01-13 16:53
Anonymer User
Liebe Kollegen/innen,
wenn ich in Java z.b. in einer if (oder auch while) Bedingung zwei oder mehrere Bedingungen abfragen will, wie wird das realsisert, also z.B nicht nur
if (a>0)
{a-=1;}
else
{blablabla}
sonderich möchte z.B. bei der if Abfrage voraussetzen, dass a>0 und dass a>b ist - oder auch dass nur eine der beiden Bedingungen erfüllt ist also
if
(a>0 und a>b)
{blabla}
usw.

oder
if
(a>0 oder a>b)
blabla

Kann mir jemand sagen wie ich in Java diese zwei oder mehr Bedingungen realisiere. Ich habe es nicht in meinem Buch gefunden.
Danke für die Mühe

Re: Bedingungen in Java 2004-01-13 16:59
Tweety
dass a>0 und dass a>b ist - oder auch dass nur eine der beiden Bedingungen erfüllt ist

hmm, fangen wir mal mit F1 an ;-)

Ich geh hier mal davon aus, dass a und b boolsche ausdrücke egal welcher art sind.
UND a, | !a, b |true | false !b |false| false
ODER a, | !a, b |true | true !b |true | false
Was ich jetzt damit sagen wollte ist, dass wenn (a oder b) true ist, dann ist auf jeden fall auch (a und b) true, also brauchst du nur if(a || b) zu schreiben.

Re: Bedingungen in Java 2004-01-13 17:06
Slater
mit Zahlen geht es auch,
und entspricht &&
oder entspricht ||
und auf genügend Klammern achten

if (((a>0) && (a>b)) || (b == 23)) {
a = -12;
}

Re: Bedingungen in Java 2004-01-13 23:28
Fred
Was ich jetzt damit sagen wollte ist, dass wenn (a oder b) true ist, dann ist auf jeden fall auch (a und b) true, also brauchst du nur if(a || b) zu schreiben.
Stimmt nicht, z.B. wenn a==true und b==false

Re: Bedingungen in Java 2004-01-13 23:54
tekai
Da hat wohl jemand in F1 nicht aufgepasst :)

Re: Bedingungen in Java 2004-01-14 11:23
Tweety
Was ich jetzt damit sagen wollte ist, dass wenn (a oder b) true ist, dann ist auf jeden fall auch (a und b) true, also brauchst du nur

if(a || b)

zu schreiben.

Stimmt nicht, z.B. wenn a==true und b==false

Ich mein das natuerlich genau andersrum, also wenn (a und b) true ist, dann ist auch (a oder b) true.

Re: Bedingungen in Java 2004-01-14 11:25
Wolf
hast dich ja noch mal reten können [img]http://www.fb18.de/gfx/22.gif[/img]

Edit: retten

Re: Bedingungen in Java 2004-01-14 11:39
Felix
um nochmal zu der eigentlichen Frage zurück zu kommen [img]http://www.fb18.de/gfx/25.gif[/img]:
& sowie && sind die Konjunktions- (Und-) Operatoren,
| und || sind die Disjunktions- (Oder-) Operatoren.
Der Unterschied besteht einfach darin, daß && bzw. || nur das erste Argument auswerten, falls danach schon klar ist, was als Wahrheitswert heraus kommt, wogegen & und | auf jeden Fall den ganzen Ausdruck auswerten. Das kann wichtig sein, wenn du z.B. als zweites Argument eine Funktion aufrufst, die einen Boolean-Wert zurück gibt, und aber auch ein paar Variablen verändert oder Ähnliches.

Und weil's so schön ist, hier (mal wieder) ein Tipp zu kostenloser Literatur zu Java:
http://www.java-tutor.com/javabuch/online.htm

Re: Bedingungen in Java 2004-01-14 19:20
Fred
um nochmal zu der eigentlichen Frage zurück zu kommen [img]http://www.fb18.de/gfx/25.gif[/img]:
& sowie && sind die Konjunktions- (Und-) Operatoren,
| und || sind die Disjunktions- (Oder-) Operatoren.
Der Unterschied besteht einfach darin, daß && bzw. || nur das erste Argument auswerten, falls danach schon klar ist, was als Wahrheitswert heraus kommt, wogegen & und | auf jeden Fall den ganzen Ausdruck auswerten.
Ich denke der wichtigste Unterschied ist, dass && und || AUSSCHLIESSLICH bool'sche Werte miteinander verknüpfen, wohingegen die & und | Operatoren AUCH auf integer Werten definiert sind. Wenn man 0 als false und alle anderen Werte als true definiert, funktionieren die natürlich so wie && und || nur mit dem schon erwähnten Unterschied des evtl. frühzeitigen Abbruchs.

Re: Bedingungen in Java 2004-01-14 19:35
UncleOwen
wohingegen & und | Operatoren auf integer Werte sind.

Oder aber auf booleans. Ich wollte auch zuerst aufschreien, aber & und | sind wirklich nicht nur auf (int, int) definiert, sondern auch auf (boolean, boolean). Und wenn man nur booleans betrachtet ist die Kurzschlussauswertung wirklich der einzige Unterschied zu && bzw. ||.

Re: Bedingungen in Java 2004-01-15 03:47
MoKrates
Wuerg! Ich *hasse* diese Moechtegern-C-Sprachen.
& und | verknuepfen bitweise, && und || verknuepfen logisch. (also Booleans). Da der Typ "boolean" nur ein Bit repraesentiert, ist & und && fuer "booleans" natuerlich gleichbedeutend (wobei, wie schon unten gesagt, der Unterschied gilt, dass bei & alle verknuepften Ausdruecke ausgewertet werden, bei && nur solange (von links nach rechts) bis das Ergebnis feststeht.).

Fuer Integers allerdings ist & noch definiert. && nicht. (in C sieht das wieder anders aus.)

Das mit der "solange bis das Ergebnis feststeht"-Auswertung hat eigentlich nur dann einen Effekt, wenn einige der verknuepften Ausdruecke Funktionen mit Nebeneffekten sind, die dann Wahlweise ausgefuehrt werden, oder auch nicht.

in C zB sind: if (a) printf("foobar");und a && printf("foobar");dasselbe.

MoKrates

Re: Bedingungen in Java 2004-01-15 19:35
Fred
Wenn man 0 als false und alle anderen Werte als true definiert, funktionieren die natürlich so wie && und || nur mit dem schon erwähnten Unterschied des evtl. frühzeitigen Abbruchs.
Hm, ich merke gerade, für & stimmt das ja gar nicht. Wenn a==1 und b==2, dann ist a&b == 0

Re: Bedingungen in Java 2004-01-16 13:12
low_level
in C zB sind: if (a) printf("foobar");und a && printf("foobar");dasselbe.

Foo.java:3: not a statement b && baz(); ^ 1 error
Och menno …

Re: Bedingungen in Java 2004-01-16 13:25
TriPhoenix
Foo.java:3: not a statement b && baz(); ^ 1 error
Och menno …

Ach du auch? [img]http://www.fb18.de/gfx/15.gif[/img]

Re: Bedingungen in Java 2004-01-16 14:18
low_level
Foo.java:3: not a statement b && baz(); ^ 1 error
Och menno …

Ach du auch? [img]http://www.fb18.de/gfx/15.gif[/img]

Ich mag C. Und nachdem ich das Paper »Evolution of C« teilweise gelesen habe, noch mehr.

http://www.fh-jena.de/~kleine/history/languages/Ritchie-CHistory-HOPL2paper.pdf

Re: Bedingungen in Java 2004-01-16 16:48
low_level
to_be || !to_be == 1, to_be | ~to_be == -1
Quelle:
http://gcc.gnu.org/bugzilla/quips.cgi?action=show

EDIT:
Und gleich noch einer:

#define say(x) lie(x) // Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property.

Re: Bedingungen in Java 2004-01-18 12:27
leif
Felix schrieb:
Der Unterschied besteht einfach darin, daß && bzw. || nur das erste Argument auswerten, falls danach schon klar ist, was als Wahrheitswert heraus kommt, wogegen & und | auf jeden Fall den ganzen Ausdruck auswerten. Das kann wichtig sein, wenn du z.B. als zweites Argument eine Funktion aufrufst, die einen Boolean-Wert zurück gibt, und aber auch ein paar Variablen verändert oder Ähnliches.
Hörte ich nicht mal, daß man solche Nebenwirkungen bei Prädikaten und Funktionen vermeiden soll? [img]http://www.fb18.de/gfx/25.gif[/img]

Ernsthaft: Dieser vorzeitige Abbruch bei der Auswertung boolscher Ausdrücke ist auch bei diesem netten Idiom sehr praktisch: if (sum != null && sum.isPositive()) { ... }"&" kann man nicht benutzen, da man sonst eine NullPointerException bekommt, wenn sum null ist.

Und weil's so schön ist, hier (mal wieder) ein Tipp zu kostenloser Literatur zu Java:
http://www.java-tutor.com/javabuch/online.htm
Dann aber bitte nicht nur einen Link zu einer Online-Version, sondern direkt zu der eigentlichen Hompage des Buches: http://www.galileocomputing.de/openbook/javainsel3/ (Wobei ich "Java ist auch eine Insel" nicht so grandios finde. OK, aber, was ich bisher gelesen habe, mit deutlichen Schwächen.)

Zu dem Punkt & vs. && kann man auch gut in die offizielle "Java Language Specification" ab 15.22 gucken.


Mo schrieb:
Wuerg! Ich *hasse* diese Moechtegern-C-Sprachen.
Auch wenn sich Java an C in einigem orientiert, so ist es eben doch eine eigene Sprache. Und "&", "|", "^" sind (ebenso wie "+") dort halt überladene Operatoren.


low schrieb:
Foo.java:3: not a statement
b && baz();
^
1 error
Och menno …
Sorry, in Java ist "0[a]" auch kein alias für "a[ 0]". [img]http://www.fb18.de/gfx/24.gif[/img]

(Lows Code-Umgebung durch eine Quote-Umgebung ersetzt, weil es hier einen Fehler in Unimatix/Rapidforum gibt.)

Re: Bedingungen in Java 2004-01-18 12:33
Fred
to_be || !to_be == 1, to_be | ~to_be == -1
Wo ist da der Fehler? Eine binäre "1" kann ja sowohl als 1 als auch als -1 gedeutet werden.

Re: Bedingungen in Java 2004-01-18 12:58
leif
to_be || !to_be == 1, to_be | ~to_be == -1
Wo ist da der Fehler?
Da ist keiner. Beide Ausdrücke sind AFAICS in C immer wahr.

Re: Bedingungen in Java 2004-01-18 16:07
Felix
Hörte ich nicht mal, daß man solche Nebenwirkungen bei Prädikaten und Funktionen vermeiden soll? [img]http://www.fb18.de/gfx/25.gif[/img]
Würde ich natürlich auch nie wagen, dem zu widersprechen [img]http://www.fb18.de/gfx/22.gif[/img], es gibt aber sicher auch Leute, die das anders handhaben - und z.B. Booleans als Rückgabewerte nutzen um anzuzeigen, ob eine Prozedur fehlerfrei ausgeführt werden konnte oder nicht.

Dann aber bitte nicht nur einen Link zu einer Online-Version, sondern direkt zu der eigentlichen Hompage des Buches: http://www.galileocomputing.de/openbook/javainsel3/ (Wobei ich "Java ist auch eine Insel" nicht so grandios finde. OK, aber, was ich bisher gelesen habe, mit deutlichen Schwächen.)
mir ging's ja nur darum, daß, auch wenn man partu (wie das wohl richtig geschrieben wird) kein Geld ausgeben möchte, immer noch ordentliche Literatur bekommen kann um Java zu lernen. Und das obige Buch deckt IMHO alle wichtigen Einstiegsbereiche ab. Bücher, die die diskutierten Operatoren nicht an prominenter und leicht zu findender Stelle abhandeln, muß man sich einfach nicht antun [img]http://www.fb18.de/gfx/23.gif[/img].

Re: Bedingungen in Java 2004-01-19 01:43
Da:Sourcerer
partu (wie das wohl richtig geschrieben wird)
Nahe dran: Partout.