Lektion zur Einführung in den bedingten Ausdruck in Java im Rahmen der Lehre der Programmiersprache Java. (bedingte Auswertung, Alternative), Lektion, Seite 720765
https://www.purl.org/stefan_ram/pub/java_bedingter_ausdruck_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Der ternäre Operator in Java 

Der ternäre Operator enthält ein durch einen Doppelpunkt getrenntes Paar von Ausdrücken.

ein durch einen Doppelpunkt getrenntes Paar von Ausdrücken
9 : 7

Durch einen Steuerungsausdruck  vom Typ »boolean« kann einer dieser beiden Ausdrücke ausgewählt werden.

Der Steuerungsausdruck wird vor das Paar geschrieben und mit einem Fragezeichen von diesem getrennt.

Ein Steuerungsausdruck vor einem Paar
true?
9 : 7

Ein wahrer  Steuerungsausdruck wählt den linken  Ausdruck aus, ein falscher  den rechten.

Ausdruck
true?
9 : 7
Wert
9
Ausdruck
false?
9 : 7
Wert
7

Einleitendes Beispiel

Der ternäre Operator hat drei Operanden: einen vor einem Fragezeichen, einen vor einem Doppelpunkt und einem hinter jenem Doppelpunkt.

Er ergibt den Wert des Operanden vor  dem Doppelpunkt, falls der Wert des ersten Operanden vor dem Fragezeichen »true« ist, und sonst den Wert des Operanden hinter  dem Doppelpunkt.

In dem Programm »Main.java« ergibt sich als Wert des ersten bedingten Ausdrucks der Wert »1.«, denn da der Wert des Operanden vor dem Fragezeichen der Wert true  ist, ist der Wert des gesamten Ausdrucks der Wert des Operanden vor  dem Doppelpunkt »:«.

Der Wert des zweiten bedingten Ausdrucks ist der Wert »4«, denn da der Wert des ersten Operanden der Wert false  ist, ist der Wert des ganzen Ausdrucks der Wert des Operanden nach dem Doppelpunkt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( true ? 1 : 2 );
java.lang.System.out.println( false ? 3 : 4 ); }}
System.out
1
4

Morphologie

Der ternäre Operator ist eine Ausnahme  von der Regel, die besagt, daß jeder Operator immer eine  lexikalische Einheit darstellt. Beim ternären Operator ist das Fragezeichen »?« und der Doppelpunkt »:« jeweils eine  lexikalische Einheit für sich, wie man auch dem Syntaxdiagramm entnehmen kann. Der ternäre Operator besteht also aus zwei  lexikalischen Einheiten.

Zuvor hatten wir schon den ebenfalls aus zwei lexikalischen Einheiten  bestehenden Klammeroperator  kennengelernt.

Ein Klammerausdruck
Ausdruck
.-. .----------. .-.
--->( ( )--->| Ausdruck |--->( ) )--->
'-' '----------' '-'

Der Operator »==« besteht aus zwei zwei, die eine  lexikalische Einheit bilden. Der ternäre Operator besteht aus zwei Zeichen, die zwei  lexikalische Einheiten bilden.

Syntax (vereinfacht)

EIn bedingter Ausdruck
Ausdruck
.-----------. .-. .------------. .-. .-------------.
--->| Ausdruck |--->( ? )--->| Ausdruck |--->( : )--->| Ausdruck |--->
'-----------' '-' '------------' '-' '-------------'

Der bedingte Ausdruck wird mit einem Operator mit drei Operanden geschrieben – einem ternären  Operator. Zwischen dem ersten und dem zweiten Operanden wird ein Fragezeichen »?« geschrieben, zwischen dem zweiten und dem dritten Operanden wird ein Doppelpunkt »:« geschrieben.

Da es in Java  nur einen  ternären Operator gibt, und dieser Operator sonst keine Namen hat, wird er oft auch der ternäre Operator  genannt.

Die Priorität dieses Operators wird gelegentlich als schwächer als die aller anderen Operatoren bis auf Zuweisungsoperatoren beschrieben, er wird auch manchmal als „rechtsassoziativ“ bezeichnet. Allerdings sind diese Begriffe zunächst nur für binäre Operatoren definiert und können auf ternäre Operatoren nicht direkt übertragen werden. In Zweifelsfällen sollten Klammern gesetzt werden. (Die genaue Syntax soll an dieser Stelle noch nicht behandelt werden.)

Typanforderungen

Der erste Operand muß vom Datentyp »boolean« sein. Die beiden anderen Operanden können jeden der bisher behandelten Typen haben.

Semantik (Wert)

Bei der Auswertung einer Anwendung dieses Operators wird zunächst der erste Operand ausgewertet.

Falls der Wert des ersten Operanden der Wert "true" ist, so wird nur noch der Wert des zweiten Operanden (des Operanden vor dem Doppelpunkt ) ausgewertet, andernfalls wird nur noch der Wert des dritten Operanden (des Operanden nach dem Doppelpunkt ) ausgewertet.

Der Wert des gesamten Ausdrucks  ist dann der Wert des in den Typ des Ausdrucks gewandelten ausgewerteten Operanden, also der Wert des zweiten Operanden, falls der erste Operand den Wert »true«, und der Wert des dritten Operanden, sonst.

Die beiden letzten Operanden dieses Ausdrucks werden daher manchmal auch als seine beiden Zweige  bezeichnet.

Der erste Operand dieses Operators wird bei der Auswertung einer Anwendung dieses Operators immer ausgewertet. Man sagt dazu auch, daß die erste Stelle dieses Operators strikt  sei und die beiden letzten Stellen träge  seien.

Ein Teil eines Ausdrucks ist träge, wenn jener Teil nur bei Bedarf  ausgewertet wird.

Der Ausdruck wählt  also aus, welcher der beiden Ausdrücke ausgewertet  wird.

Bei diesem Operator ist also die erste Stelle strikt, und die beiden letzten Stellen sind träge.

Der bedingte Ausdruck mit beschreibenden Begriffen
Entscheidung
.-----------. .-. .------------. .-. .-------------.
--->| Bedingung |--->( ? )--->| Konsequenz |--->( : )--->| Alternative |--->
'-----------' '-' '------------' '-' '-------------'
Steuerungsausdruck

Aussprache

Java 
x ? 1 : 2
auf deutsch:
„falls »x« (gilt), dann »1«, sonst »2«“

Trägheit der letzten beiden Operanden

Die beiden letzten Stellen dieses Operators sind träge, sie werden also nur bei Bedarf  (bedingt) ausgewertet.

Das folgende Programm zeigt, daß von den vier println-Aufrufen im Hauptprogramm nur die Aufrufe »println( "R0" )« und »println( "L1" )« ausgewertet werden.

Main.java

public final class Main
{

public static void eval( final int i ){ }

public static int println( final java.lang.String s )
{ java.lang.System.out.println( s ); return 1; }

public static void main( final java.lang.String[] args )
{ eval( false ? println( "L0" ): println( "R0" ));
eval( true ? println( "L1" ): println( "R1" )); }}

Protokoll
R0
L1

Das folgende Beispiel zeigt, wie die Trägheit des letzten Arguments verwendet werden kann, um nichtzulässige Operationen zu verhindern (der Wert einer Division durch 0 ist in der Mathematik nicht definiert).

Außerdem sieht man, wie das Ergebnis des ternären Operators durch Verkettung mit der leeren Kette »""« in einen java.lang.String -Wert gewandelt wird, damit es dann mit dem für die Methode kehrwert  definierten Typ java.lang.String  zurückgegeben werden kann. Diese Wandlung ist im Grundkurs nur ausnahmsweise nötig, weil der genaue Typ des ternären Operators in diesem Fall hier noch nicht behandelt werden soll.

Eine Division durch »0« kann in Java  zu einem Programmabbruch führen, wie das folgende Programm zeigt.

Main.java

public final class Main
{

public static java.lang.String kehrwertMalTausend( final int n )
{ return( 1000/n )+ ""; }

public static void schreibKehrwertMalTausend( final int n )
{ java.lang.System.out.println
( "Der tausendfache Kehrwert von " + n + " ist " + kehrwertMalTausend( n )+ "." ); }

public static void main( final java.lang.String[] args )
{ schreibKehrwertMalTausend( 2 );
schreibKehrwertMalTausend( 0 );
schreibKehrwertMalTausend( 2 ); }}

Protokoll
Der tausendfache Kehrwert von 2 ist 500.
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.kehrwertMalTausend(Main.java:5)
at Main.schreibKehrwertMalTausend(Main.java:9)
at Main.main(Main.java:13)
Aussprachehinweis
arithmetic əˈrɪθmətɪk (die voranstehende Aussprache gilt für das Substantiv, die Aussprache des Adjektivs lautet /ˌærɪθˈmɛtɪk/)

Wir hatten schon gesehen, daß die Ausgabe eines Aufrufs von »java.lang.Thread.dumpStack« das Wort »Exception« beinhalten. Dort bedeutete es ausnahmsweise keine Fehlermeldung. In der Regel informatiert die Ausgabe einer Meldung mit dem Wort »Exception« aber über einen Fehler, der erst während der Ausführung des Programmes beobachtet wurde und so schwerwiegend ist, daß das Programm sofort abgebrochen werden muß (der dritte Aufruf von »schreibKehrwertMalTausend« wird nicht mehr ausgeführt).

Das folgende Programm zeigt, daß der Programmabbruch durch einen bedingten Ausdruck verhindert werden kann.

Main.java

public final class Main
{

public static java.lang.String kehrwertMalTausend( final int n )
{ return( n == 0 ? "undefiniert" : 1000/n )+ ""; }

public static void schreibKehrwertMalTausend( final int n )
{ java.lang.System.out.println
( "Der tausendfache Kehrwert von " + n + " ist " + kehrwertMalTausend( n )+ "." ); }

public static void main( final java.lang.String[] args )
{ schreibKehrwertMalTausend( 2 );
schreibKehrwertMalTausend( 0 );
schreibKehrwertMalTausend( 2 ); }}

transcript
Der tausendfache Kehrwert von 2 ist 500.
Der tausendfache Kehrwert von 0 ist undefiniert.
Der tausendfache Kehrwert von 2 ist 500.

Wenn die letzte Stelle des ternären Operators nicht träge wäre, so würde sie in jedem Falle ausgewertet werden, auch wenn der Wert dann nicht verwendet wird. Dies könnte aber zu einem Programmabbruch führen, wie das frühere Programmbeispiel zeigte.

Die Trägheit der letzten Stelle dieses Operators bedeutet, daß in »true ? x : 1/x«, die Division nie vollzogen wird. Entsprechend bedeutet die Trägheit der vorletzten Stelle dieses Operators, daß in »false ? 1/x : x«, die Division nie vollzogen wird.

Daß nur einer der beiden letzten Operanden ausgewertet wird, kann man sich aus so vorstellen: Wenn die Auswertung des ersten Operanden keine Zeit kostet, und die Auswertung der letzten beiden Operanden jeweils eine Sekunde, dann dauert die Auswertung des gesamten Operatorausdrucks nur eine Sekunde und nicht zwei Sekunden.

Aussagen zur Gleichheit von double-Werten sind in der Regel nicht sinnvoll, eine Ausnahme sind aber in manchen Fällen Aussagen zur Gleichheit mit »0.0«, etwa um durch vorherige Prüfung eine Division durch »0.0« zu verhindern (wie das geht, wird später gezeigt werden).

Beispiel Verschachtelung ternärer Operatoren

Das folgende Beispiel zeigt die Verschachtelung ternärer Operatoren.

Main.java

public final class Main
{

public static java.lang.String deutsch( final int a )
{ return a == 0 ? "Null":
a == 1 ? "Eins":
"Zwei"; }

public static void print( final int a )
{ java.lang.System.out.println( a + " ist " + deutsch( a )+ "." ); }

public static void main( final java.lang.String[] args )
{ print( 0 ); print( 1 ); print( 2 ); }}

java.lang.System.out
0 ist Null.
1 ist Eins.
2 ist Zwei.

Beispiel Glücksspiel

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( java.lang.Math.floor( java.lang.Math.random() * 4 )== 0.0?
"Gratuliere! Sie haben gewonnen!":
"Schade, Sie haben leider verloren!" ); }}
transcript
Schade, Sie haben leider verloren!
transcript
Schade, Sie haben leider verloren!
transcript
Schade, Sie haben leider verloren!
transcript
Gratuliere! Sie haben gewonnen!

Das folgende Beispiel zeigt, daß der bedingte Ausdruck auch als Initialisierungsausdruck in einer Konstantendeklaration verwendet werden kann.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String result =
java.lang.Math.floor( java.lang.Math.random() * 4 )== 0.0?
"Gratuliere! Sie haben gewonnen!":
"Schade, Sie haben leider verloren!";

java.lang.System.out.println( result ); }}

Das folgende Beispiel zeigt den bedingten Ausdruck als Rückgabeausdruck.

Main.java

public final class Main
{ public static java.lang.String result()
{ return
java.lang.Math.floor( java.lang.Math.random() * 4 )== 0.0?
"Gratuliere! Sie haben gewonnen!":
"Schade, Sie haben leider verloren!"; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( result() ); }}

Übungsfragen

?   Übungsfrage 0

Was ist der Wert von »true ? 8 : 2«?

?   Übungsfrage 1

Was ist der Wert von »false ? 12 : 9«?

?   Übungsfrage 2

Was ist die Ausgabe des folgenden Programmes?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 == 2 ? "Ok." : "Fehler." ); }}

?   Übungsfrage 3

Was ist die Ausgabe des folgenden Programmes?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 == 3 ? "Fehler." : "Ok." ); }}

?   Übungsfrage 4

Was ist die Ausgabe des folgenden Programmes?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "C" +( 2 == 2 ? "B" : "A" )+ "D" ); }}

?   Übungsfrage 5

Was gibt das folgende Programm aus?

Main.java

public final class Main
{

public static java.lang.String isNull( final int x )
{ return( x == 0 ? "" : "nicht-" )+ "null"; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( isNull( 0 ));
java.lang.System.out.println( isNull( 1 )); }}

?   Übungsfrage 6

Main.java

public final class Main
{

public static java.lang.String isNull( final int x )
{ return( x == 0 ? "" : "nicht-" )+ "null"; }

public static void print( final int x )
{ java.lang.System.out.println( x + " ist " + isNull( x )+ "." ); }

public static void main( final java.lang.String[] args )
{ print( 0 );
print( 1 ); }}

?   Übungsfrage 7 *

Was ist die Ausgabe des folgenden Programms?

Main.java

public final class Main
{

public static void werteAus( final int b ){}

public static boolean druckHallo()
{ java.lang.System.out.print( "Hallo" ); return false; }

public static void main( final java.lang.String[] args)
{ werteAus( druckHallo() ? 0 : 1 ); }}

Warum ist der Parametertyp von »werteAus(int)« gleich »int« während der Rückgabetyp von »druckHallo()« doch »boolean« ist?

Warum ist die Methode »werteAus« überhaupt nötig, wenn sie weder einen Wert noch eine Wirkung hat? Könnte denn nicht statt »werteAus( druckHallo() ? 0 : 1 );« auch »druckHallo() ? 0 : 1;« verwendet werden?

Übungsaufgaben

Diese Übungsaufgaben sollten möglichst ohne Vorgriffe, also mit den bisher behandelten Sprachelementen gelöst werden.

/   Schreiben eines bedingten Ausdrucks (Syntax)

Schreiben Sie einen bedingten Ausdruck mit der Bedingung »v« (einem Ausdruck), der Konsequenz »a« (einem Ausdruck) und der Alternative »2« (einem Ausdruck). Dieser bedingte Audruck soll von Leerzeilen umgeben sein.

Der bedingte Ausdruck mit beschreibenden Begriffen
Entscheidung
.-----------. .-. .------------. .-. .-------------.
--->| Bedingung |--->( ? )--->| Konsequenz |--->( : )--->| Alternative |--->
'-----------' '-' '------------' '-' '-------------'
Steuerungsausdruck

/   Schreiben eines bedingten Ausdrucks (Semantik)

Schreiben Sie einen bedingten Ausdruck der »12« ergibt, falls der Wert einer Auswertung von »java.lang.Math.random()« kleiner als ein Drittel ist und »8« sonst.

Dieser Ausdruck soll auf einer von Leerzeilen umgebenden Zeile stehen.

/   Eine Methode

Schreiben Sie eine Deklaration einer Methode »f«, die »17« ergibt.

/   Eine willkürliche Methode

Schreiben Sie eine Deklaration einer Methode »f«, die »17« ergibt, falls ihr Argumentwert »7« ist, und sonst »12«.

Falls die Deklaration der Methode »f« in den folgenden Testrahmen eingesetzt wird, sollte bei Ausführung des sich ergebenden Programmes »richtig« ausgegeben werden.

Main.txt

public final class Main
{

__________

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( f( 7 )== 17 ? f( 5 )== 12 ? f( -5 )== 12 ? "richtig"
: "falsch" : "falsch" : "falsch" ); }}

/   Eine Methode (1)

Schreiben Sie eine Deklaration einer Methode »f«, die »17« ausgibt.

/   Eine willkürliche Methode (1)

Schreiben Sie eine Methode »g«, die 17 ausgibt, falls ihr Argumentwert 7 ist, und sonst 12. Verwenden Sie dazu die Lösung der vorigen Übungsaufgabe, ohne diese zu verändern.

/   Umwandlungsmethode

Schreiben Sie eine Deklaration einer Methode namens »int_of«, welche einen Argumentwert vom Typ ›boolean‹ in den Typ ›int‹ wandelt. Der Wert der Methode soll «1» für den Argumentwert «true» und «0» für den Argumentwert «false» sein.

/   Umwandlungsmethode (1)

Schreiben Sie eine Deklaration einer Methode namens »boolean_of«, welche einen Argumentwert vom Typ ›int‹ in den Typ ›boolean‹ wandelt. Der Wert der Methode soll «false» für den Argumentwert «0» und sonst «true» sein.

/   Textdarstellung von Schulnoten ⃗

Schreiben Sie mit Hilfe des ternären Operators eine Wertmethode, welche dem Argumentwert »1« die Zeichenfolge »"sehr gut"« und dem Argumentwert »2« die Zeichenfolge »gut« zuordnet.

/   Textdarstellung von Schulnoten (1) ⃗

Schreiben Sie mit Hilfe des ternären Operators eine Wertmethode, welche dem Argumentwert »1« die Zeichenfolge »"sehr gut"«, dem Argumentwert »2« die Zeichenfolge »gut« und dem Argumentwert »3« die Zeichenfolge »befriedigend« zuordnet.

/   Übungsaufgabe

Schreiben Sie eine Methode, die eine ganze Zahl als Argument akzeptiert. Man kann sich vorstellen, daß diese Zahl das Alter einer Person in Jahren angeben soll.

Wenn die übergebene Zahl negativ ist, soll zurückgegeben werden: »nicht akzeptabel«.

Sonst soll zurückgegeben werden: »akzeptabel«.

Zusatzanforderung: Auch bei einem Alter von mehr als 125 Jahren soll ausgegeben werden: »nicht akzeptabel«.

Zusatzanforderung: Schreiben Sie eine weitere Methode, die so wie die vorige Methode ist, aber den Text ausgibt und nicht zurückgibt. Rufen Sie in dieser weiteren Methode die erste Methode auf, um den auszugebenden Text zu ermitteln.

/   Wandlung von boolean  nach int

Schreiben Sie mit Hilfe des ternären Operators eine Wertmethode, welche dem Argumentwert »false« das Ergebnis »0« und dem Argumentwert »true« das Ergebnis »1« zuordnet.

/   Wandlung von boolean  nach java.lang.String

Schreiben Sie mit Hilfe des ternären Operators eine Wertmethode, welche dem Argumentwert »false« das Ergebnis »"falsch"« und dem Argumentwert »true« das Ergebnis »"wahr"« zuordnet.

/   Zahlen auf deutsch ⃗

Erweitern Sie das folgende Programm um die Zahlenwörter „Drei“ und „Vier“!

Main.java

public final class Main
{

public static java.lang.String deutsch( final int a )
{ return a == 0 ? "Null":
a == 1 ? "Eins":
"Zwei"; }

public static void print( final int a )
{ java.lang.System.out.println( a + " ist " + deutsch( a )+ "." ); }

public static void main( final java.lang.String[] args )
{ print( 0 ); print( 1 ); print( 2 ); }}

/   Teilbarkeit ⃗

Schreiben Sie die Deklaration einer Methode »d2«, so daß der Wert des Ausdrucks »d2( j )« genau dann true  ist, wenn »j« durch »2« teilbar ist.

/   Schaltjahr ⃗

Schreiben Sie die Deklaration einer Methode »schaltjahr«, so daß der Wert des Ausdrucks »schaltjahr( j )« genau dann true  ist, wenn »j« ein Schaltjahr war (Diese Methode braucht nur für Jahreszahlen von 2001 bis 2099 richtige Ergebnisse zu liefern).

/   Sternchen ⃗

Schreiben Sie mit Hilfe des ternären Operators eine Methode, die so viele Sternchen »*« ausgibt, wie der Wert ihres ganzzahligen nicht-negativen Arguments angibt.

/   Urteil ⃗

Schreiben Sie mit Hilfe des ternären Operators eine parametrisierte Wertmethode, welche die Zeichenfolge »negativ«, »Null« oder »positiv« zurückgibt, je nachdem was für ihr Argument zutrifft.

Zusatzanforderung Schreiben Sie dann noch eine parametrisierte Wirkmethode, welche das Ergebnis der zuvor geschriebene Wertmethode für ihr Argument ausgibt.

/   Maximum zweier Zahlen

Ergänzen sie die Deklaration der parametrisierten Wertmethode »max« in dem folgenden Programmgerüst, so daß jene Wertmethode »max« das Maximum ihrer beiden Argumente vom Typ »int« zurückgibt. Im Rumpf jener Wertmethode dürfen bei dieser Aufgabe keine anderen Methoden aufgerufen werden.

Bei Ausführung des sich ergebenden Programmes sollte dann »richtig« ausgegeben werden.

Main.txt

public final class Main
{

public static int max( final int x, final int y )
__________

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( max( 2, 3 )== 3 ? max( 3, 2 )== 3 ? max( 3, 3 )== 3 ? "richtig"
: "falsch" : "falsch" : "falsch" ); }}

/   Maximum dreier Zahlen ⃗

Schreiben Sie mit Hilfe des ternären Operators eine parametrisierte Wertmethode, welche das Maximum ihrer drei Argumente vom Typ »int« zurückgibt. Im Rumpf jener Wertmethode dürfen bei dieser Aufgabe keine anderen Methoden aufgerufen werden.

Zusatzanforderung Schreiben Sie dann noch eine parametrisierte Wirkmethode, welche das Ergebnis der zuvor geschriebene Wertmethode für ihr Argument ausgibt.

Zusatzaufgaben *

Diese Zusatzaufgaben sollten möglichst ohne Vorgriffe, also mit dem bisher behandelten Sprachelementen gelöst werden. (Da der Autor selber noch nicht alle Aufgaben bearbeitet hat, ist es nicht sicher, daß sich alle auf diese Weise lösen lassen. Es wird aber erwartet, daß dies möglich ist.)

/   Die Fakultät *

Definieren Sie eine Methode zur Berechnung der Fakultät einer natürlichen Zahl »n«, die der folgenden mathematischen Definition möglichst nahekommt.

Mathematische Definition der Fakultät
          .-
| n * f( n - 1 ), falls n nicht 0 ist
f( n ) = <
| 1, sonst
'-

Datentypen *

Die anderen beiden Operanden können beide vom Datentyp boolean  sein, und dann hat das Ergebnis auch den Typ boolean. Die beiden letzten Operanden können beiden numerisch sein, und dann ist der Typ double, wenn einer der beiden letzten Operanden double  ist, und int, wenn beide int  sind. Wenn die beiden letzten Operanden den Typ java.lang.String  haben, dann ist der Typ des gesamten Ausdrucks ebenfalls java.lang.String. Keiner der beiden letzten Operanden darf den Metatyp »void« haben.

Falls einer der beiden letzten Operanden den Typ java.lang.String  hat und der andere nicht, so ist der Typ des Ausdrucks ein etwas komplizierterer Typ, der erst später behandelt werden soll. Er läßt sich aber durch Verkettung mit der leeren Zeichenkette in einen Ausdruck vom Typ java.lang.String  wandeln, so daß wir diesen Typ wie java.lang.String  nutzen können, wenn wir ihn noch in einen java.lang.String -Ausdruck wandeln. Dazu folgt weiter unten ein Beispiel.

gesamter Ausdruck erster Ausdruck zweiter Ausdruck dritter Ausdruck

boolean boolean boolean boolean
int boolean int int
double boolean int double
double boolean double int
double boolean double double
java.lang.String boolean java.lang.String java.lang.String
(java.lang.String) boolean java.lang.String boolean
(java.lang.String) boolean java.lang.String int
(java.lang.String) boolean java.lang.String double
(java.lang.String) boolean boolean java.lang.String
(java.lang.String) boolean int java.lang.String
(java.lang.String) boolean double java.lang.String

Illustration der Trägheit des ternären Operators *

Das folgende Programm zeigt, daß die Addition strikt ist, also alle ihre Operandenausdrücke auswertet.

Main.java

public final class Main
{

public static int f0(){ java.lang.System.out.println( "f0" ); return 0; }
public static int f1(){ java.lang.System.out.println( "f1" ); return 1; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( f0() + f1() ); }}

transcript
f0
f1
1

Das folgende Programm zeigt, daß der ternäre Operator träge ist, also nicht alle seine Operandenausdrücke auswertet.

Main.java

public final class Main
{

public static boolean bf(){ java.lang.System.out.println( "bf" ); return false; }
public static boolean bt(){ java.lang.System.out.println( "bt" ); return true; }

public static int f0(){ java.lang.System.out.println( "f0" ); return 0; }
public static int f1(){ java.lang.System.out.println( "f1" ); return 1; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( bf() ? f0() : f1() );
java.lang.System.out.println();
java.lang.System.out.println( bt() ? f0() : f1() ); }}

transcript
bf
f1
1

bt
f0
0

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720765 stefan_ram:720765 bedingte Auswertung, Alternative bedingte Ausführung, Verzweigug, source, source code,sourcecode, Programmier sprache C++ Sprache, C++, CXX, C+, Programm, Programme, C++-Programm C++ Sprache C++ Programmiersprache C++ c++-Programme, Standard C++, Programmieren in C++, Programmieren in CXX, Programmieren in CPP, Programmieren in Cplusplus, Die Programmiersprache C++, Die Programmiersprache CXX, Die Programmiersprache CPP, Die Programmiersprache Cplusplus, Die Programmier sprache C++, Die Programmier sprache CXX, Die Programmier sprache CPP, Die Programmier sprache Cplusplus, CXX-Programmierung, C++-Programmierung, CPP-Programmierung, c-plus-plus, cpluplus-Programmierung, ANSI-C++, ANSI-CXX, ANSI-CPP, ANSI C++, ANSI CXX, ANSI-cpluscplus ISO-C++, ISO-CXX, ISO CPP, ISO C++, ISO CXX, ISO/IEC-C++, ISO/IEC-CXX, ISO/IEC CPP, ISO/IEC C++, ISO/IEC CXX, IEC-C++, IEC-CXX, IEC CPP, IEC C++, IEC CXX, International Standard ISO/IEC 14882 First edition 1998-09-01, ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), ASC X3, 7/27/98, c plus plus, C ++, cplusplus, c plus plus, Standard C+ programmieren, Stamdard C++ programmieren, Standart C+ programmieren, Stamdart C++ programmieren, INCITS/ISO/IEC 14882-1998, Information Technology - Programming Languages - C++ (formerly ISO/IEC 14882-1998), Programmieren in C++,Programmiersprache C++ CPP CXX Cplusplus c plus plus International Standard ISO/IEC 14882 First edition 1998-09-01, Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720765, slrprddef720765, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_bedingter_ausdruck_de