Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator

M4D-M4X

Bekanntes Mitglied
Hi Leute,

ich habe ein kleines Verständnisprobelm mit den ternären Operatoren.

Laut dem Tutorial in diesem Forum lautet die Allgemeine Formel:

Java:
x = BOOL_TEST ? TRUE_FALL : FALSE_FALL


Wie funktioniert das ganze wenn ich folgende Funktion habe:

Java:
(x > 0 ? foo1 : foo2)

Im Endeffekt ist es ja nichts anderes wie:

Java:
if(x > 0){
  x = foo1;
}
else{
  x = foo2;
}

oder?

Okay mir ist gerade aufgefallen wie sich das ganze verhält :D (während dem schreiben).

Mein Problem war zu erkennen, dass bei x = BOOL_TEST das x = nicht zum Operator mit dazugehört, sondern eine simple Variablenzuweisung ist.

Ich werde den Post trotzdem machen, da er ternäre Funktionen etwas verdeutlicht :rtfm:
Viel glück, die die diesen Post lesen :D

Schöne Grüße
The M4D one
 

w0ddes

Bekanntes Mitglied
Naja, stimmt fast.

An sich müsste es heißen:
Java:
x = (x > 0 ? foo1 : foo2)

da nur so deine
Code:
if
-Schreibweise stimmt ;)

Aber ansonsten stimmt das mit dem Ablauf.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
mhnnn nicht ganz im grunde bedeuet:

(x > 0 ? foo1 : foo2)

Java:
if(x>0){
 return foo1;
}else{
 return foo2;
}
foo1, bzw foo2 werden nicht ausgeführt, wie werden zurück gegeben

und in dem bespiel dann x zugewiesen...
 

M4D-M4X

Bekanntes Mitglied
Zuletzt bearbeitet:

w0ddes

Bekanntes Mitglied
Aber im Prinzip ist es doch egal ob der Code so ausgeführt wird oder ob der Ergebniswert via

return foo1; oder return foo2;

zurückgegeben wird und anschließend zugewiesen wird oder?

Das Ergebnis ist das selbe... oder nicht?

Wie ARadauer schon sagte, muss man das Ganze als
Code:
return
's ansehen, die man zuweisen muss!

Du musst deshlab darauf achten, dass es auch zugeweisen wird! Wenn du nur
Code:
x < 0 ? foo1 : foo2
machst, weißt du die "foo"s nicht zu! Deshalb musst du eben so etwas machen:
Code:
x = x < 0 ? foo1 : foo2
. Nur so werden die zurückgegeben Werte zugewiesen und der Ausdruck ist korrekt!

Und das Tutorial stimmt schon, denn dort steht ja:
Code:
x = y == 0 ? 0 : 100
(bzw zur verdeutlichung geschrieben:
Code:
x = ( y== 0 ? 0 : 100)
) Denn dann weißt du
Code:
x
entweder 0 oder 100 zu, jenachdem welchen Wert y hat!

Ich hoffe du verstehst nun, was wir dir sagen wollen :)
 

Landei

Top Contributor
Das eigentliche "Feature" und gleichzeitig das "Problem" des ternären Operators ist, dass er im Gegensatz zu if einen Wert zurückliefert bzw. zurückliefern muss. Ein ternärer Operator kann nicht einfach in der Gegend herumstehen, man muss etwas mit ihm "machen": Entweder das Ergebnis zuweisen, als Argument benutzen oder mit return zurückliefern. Deshalb funktioniert auch etwas wie
Java:
x < 0 ? System.out.println("negativ") : System.out.println("nicht-negativ"); //geht nicht
nicht: Die Teilausdrücke liefern void zurück, und man kann in Java void nicht zuweisen oder zurückliefern (was meiner Meinung nach eine Lücke im Typsystem ist). Natürlich kann das Beispiel so umgeschrieben werden, dass es funktioniert:
Java:
System.out.println(x < 0 : "negativ" : "nicht-negativ");
 

M4D-M4X

Bekanntes Mitglied
Okay danke erstmal.

Ich merk schon ich muss noch dran arbeiten mich klar auszudrücken :oops:

Das man das ganze natürlich zuweisen muss ist selbstverständlich klar, ohne das funktionierts natürlich nicht.

Das was ich meinte, was im Tutorial geändert werden sollte war die Umschreibung für den Operator.

Also das:

Java:
if(x > 0){
  x = foo1;
}
else{
  x = foo2;
}


zu

Java:
if(x>0){
 return foo1;
}else{
 return foo2;
}

da es ja nur eine Zuweisung ist und im Endeffekt falsch geschrieben wurde oder?
 

Marco13

Top Contributor
Nein, der Ternäre Operator impliziert eben keine Zuweisung und kein Return. Zu sagen: "Das ist eine Akürzung für [irgendwas mit 'if']" ist so gesehen einfach unpäzise. Es ist vielleicht legitim, um an einem speziellen Beispiel deutlich zu machen, was der Operator macht, aber er ist eben keine if-Abfrage, sondern, wie es auch in der JLS beschrieben ist, Teil eines bedingten Ausdrucks.

Das hier
[c](x > 0 ? foo1 : foo2)[/c]
IST (wenn es ausgewertet wird) eben einfach 'foo1' oder 'foo2' - ohne if, ohne return. Einfach nur der Ausdruck foo1 oder foo2. Wenn man weiß, dass x>0 ist, könnte man stattdessen auch einfach
[c]foo1[/c]
hinschreiben. Alleine macht das natürlich keinen Sinn, deswegen gibt's auch einen Compilerfehler. Aber in Zuweisungen oder returns oder so kann man es eben als "alternative zu einem if" verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
A Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
1 Verständnisproblem mit Foreach Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
KogoroMori21 Erklärung zum Ternären Operator Java Basics - Anfänger-Themen 4
K Konsolenanwendung - Taschenrechner - erkennt Operanten nicht Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben