Der Datentyp »boolean« in Java
Wir haben bisher schon Datentypen wie »int« oder »double« kennengelernt. Daneben gibt es in Java auch noch einen elementaren Datentyp namens »boolean«.
In diesem Teil dieses Kurses geht es um Kontrollstrukturen, diese basieren auf Werten des Typs »boolean«; deswegen behandeln wir zunächst diesen Typ.
Schreibweise
Außer dem Typ »boolean« gibt es in Java auch noch einen anderen Datentyp namens »Boolean« mit großem »B«, der aber in dieser Lektion noch nicht behandelt werden soll. Da dies ein anderer Datentyp ist als »boolean« mit kleinem »b« ist darauf zu achten, den in dieser Lektion behandelten elementaren Datentyp »boolean« immer mit einem kleinen »b« zu schreiben.
Literale
Es gibt zwei Literale, die den Datentyp »boolean« haben, nämlich »true« und »false«. Diese haben die Bedeutung „wahr“ beziehungsweise „falsch“. Wir nennen sie auch Wahrheitsliterale. Ihre Werte sind nicht einander gleich, und wir nennen den Wert des Literals »true« ebenfalls “true ”, und den Wert des Literals »false« “false ”. Andere Werte gibt es bei dem Datentyp »boolean« nicht, er umfaßt also genau 2 Werte. Die Ausgabedarstellung dieser beiden Werte ist wiederum »true« und »false«, wie das folgende Programm zeigt.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( true );
java.lang.System.out.println( false ); }}java.lang.System.out
true
false
Zu den Wörtern “true ” /tru/ ist das englische Wort für „wahr“, “false ” ist das englische Wort für „falsch“. George Boole war ein Mathematiker, “boolean ” ist das englische Adjektiv mit der Bedeutung des deutschen Adjektivs „Boolesch“ („zu George Boole gehörend“).
- Aussprachehinweise
- true tru [τhɚʊu]
- false fɔls
- boolean ˈbu li ən
Bezeichner ⊚
Ein Bezeichner ist eine Bezeichnerzeichenfolge, die kein Schlüsselwort ist und nicht »_« und keines der beiden Wahrheitsliterale »true« und »false« ist.
»true« ist beispielsweise eine Bezeichnerzeichenfolge, aber kein Bezeichner, da es eines der beiden Wahrheitsliterale »true« und »false« ist.
Literale ⊚
(Das Symbol »⁺« kennzeichnet eine Erweiterung einer früheren Definition.)
Ein Literal ist ein Numerale, ein Zeichenfolgenliteral oder ein Wahrheitsliteral (»true« oder »false«).
Werte ⊚
Uns bisher bekannt Arten von Werten sind nun: Zahlen, Zeichenfolgen und Wahrheitswerte.
Schlüsselwörter ⊚
Während »true« und »false« keine Schlüsselwörter sind, ist »boolean« ein Schlüsselwort.
- Die bisher behandelte Schlüsselwörter
- »boolean«, »double«, »final«, »int«, »long«, »public«, »return«, »static«, »void«
Typen ⊚
Wir können die Liste der Typen nun um ›boolean‹ erweitern.
- Typ
Typ
.---.
---.---->( int )----->.--->
| '---' ^
| .------. |
'--->( long )----'
| '------' |
| .------. |
'--->( double )----'
| '------' |
| .-------. |
'--->( boolean )---'
| '-------' |
| .-------. |
'---->| Name |----'
'-------'
Prädikate
Eine Abbildung, welche eine Ergebnis vom Typ »boolean« hat, wird in Analogie zur Logik auch als Prädikat bezeichnet.
Es gibt in Java beispielsweise Prädikate, mit denen ermittelt werden kann, ob ein Text aus syntaktischer Sicht als Name verwendet werden kann.
- Dokumentation eines Prädikats (vereinfacht und übersetzt)
javax.lang.model
Class SourceVersionstatic boolean isName( java.lang.String string )
- Ergibt, ob die als Argument übergebene Zeichenfolge ein Name im Sinne der Programmiersprache Java ist.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "x" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "var" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha3" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha.beta" ));java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "=" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "_" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "0" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "3d" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "int" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "true" )); }}- Protokoll
true
true
true
true
true
false
false
false
false
false
false
Man kann die Anwendung eines Prädikats mit einer geschlossenen Frage vergleichen.
Übungsaufgaben
/ Variable ⃖
Schreiben Sie ein Programm, in dem eine Variable mit dem Typ »int« deklariert und mit dem Wert »3« initialisiert wird.
/ Wahrheitsvariable ⃖
Schreiben Sie ein Programm, in dem eine Variable mit dem Typ »boolean« deklariert und mit dem Wert »false« initialisiert wird.
/ Methode ⃖
Schreiben Sie eine Deklaration einer Methode, die einen Parameter vom Typ »int« hat und die Zeichenfolge »n« (also einen einzelnen Buchstaben) ausgibt.
/ Wahrheitsmethode ⃖
Schreiben Sie eine Deklaration einer Methode, die einen Parameter vom Typ »boolean« hat und die Zeichenfolge »n« (also einen einzelnen Buchstaben) ausgibt.
/ Rückgabe ⃖
Schreiben Sie eine Deklaration einer parameterlosen Methode namens »t«, welche den Wert »5« zurückgibt.
/ Wahrheitsrückgabe ⃖
Schreiben Sie eine Deklaration einer parameterlosen Methode namens »t«, welche den Wert »true« zurückgibt.
/ Methode 1 ⃖
Schreiben Sie eine Deklaration einer Methode namens »print«, welche einen Ausdruck vom Typ »int« als Argument akzeptiert und dessen Wert ausgibt. Diese Methode soll keinen Wert liefern.
/ Wahrheitsmethode 1 ⃖
Schreiben Sie eine Deklaration einer Methode namens »print«, welche einen Ausdruck vom Typ »boolean« als Argument akzeptiert und dessen Wert (also »true« oder »false«) ausgibt. Diese Methode soll keinen Wert liefern.
/ Umwandlungsmethode
Schreiben Sie eine Deklaration einer Methode namens »str«, welche einen Argumentwert vom Typ ›boolean‹ in den Typ ›java.lang.String‹ wandelt. Der Wert der Methode soll also «"true"» für den Argumentwert «true» und «"false"» für den Argumentwert «false» sein.
/ Prädikat verwenden
Ermitteln Sie, welchen Wert die Methode »isKeyword« für die Zeichenfolge »true« ergibt.
(Bei dieser Übungsaufgabe soll ein Programm mit einem entsprechenden Aufruf geschrieben und der Wert des Aufrufs dann ausgegeben werden. So kann der Wert, den die Methode »isKeyword« für die Zeichenfolge »true« ergibt, dann abgelesen werden.)
„Die Methode m ergibt den Wert w für die Zeichenfolge s.“ bedeutet, daß die Methode m den Wert w ergibt, wenn sie mit der Zeichenfolge s als Argumentwert aufgerufen wird.
- Dokumentation eines Prädikats (vereinfacht, korrigiert und übersetzt)
javax.lang.model
Class SourceVersionstatic boolean isKeyword( java.lang.String string )
- Ergibt, ob die als Argument übergebene Zeichenfolge ein Schlüsselwort in der Programmiersprache Java oder eines der mit einem Buchstaben beginnenden Literale ist.
- Aussprachehinweise
- model mɑːdl
- source sɔɚs
- version ˈvɚ ʒn
- is keyword ɪz̥ ˈki ˌwɚd
/ Prädikat verwenden ⃗
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte erst nach der Nachbesprechung der vorigen Übungsaufgabe bearbeitet werden.
Ermitteln Sie, welchen Wert die Methode »isIdentifier« für die Zeichenfolge »true« ergibt.
- Dokumentation eines Prädikats (vereinfacht und übersetzt)
javax.lang.model
Class SourceVersionstatic boolean isIdentifier( java.lang.String string )
- Ergibt, ob die als Argument übergebene Zeichenfolge eine Bezeichnerzeichenfolge (Lektion 10.12.) im Sinne der Programmiersprache Java ist.
- Aussprachehinweise
- is identifier ɪz ɑɪ ˈdɛn tə ˌfɑɪɚ
/ Code Überarbeiten ⃗
Das folgende Programm beurteilt, ob verschiedene Zeichenfolgen Namen sind.
Überarbeiten Sie den Quelltext des folgenden Programmes so, daß vor dem Wahrheitswert auch stets die zu beurteilende Zeichenfolge ausgegeben wird. Dabei sollte die Ausgabe möglichst in Form zweier Spalten erfolgen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "=" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "0" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "3d" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "int" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "true" ));java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "x" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha3" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha.beta" )); }}Sollausgabe
= false
0 false
3d false
int false
true false
x true
alpha true
alpha3 true
alpha.beta true
/ Code Überarbeiten (Schritt 1) ⃗
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte erst nach der Nachbesprechung der vorherigen Übungsaufgabe behandelt werden.
Der Ausgangspunkt dieser Übung ist jetzt wieder der folgende Quelltext.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "=" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "0" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "3d" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "int" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "true" ));java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "x" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha3" ));
java.lang.System.out.println( javax.lang.model.SourceVersion.isName( "alpha.beta" )); }}Sollausgabe
false
false
false
false
false
true
true
true
true
Definieren Sie nun eine Methode, um zu erreichen, daß das obige Programm nicht mehr so viele Wiederholungen längerer Programmteile enthält. (Beispielsweise soll »javax.lang.model.SourceVersion.isName« nur noch einmal im Quelltext vorkommen.)
/ Code Überarbeiten (Schritt 2) ⃗
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte erst nach der Nachbesprechung der vorherigen Übungsaufgabe behandelt werden.
Überarbeiten Sie den Quelltext der Lösung der direkt vorangehenden Übungsaufgabe nun wieder so, daß vor dem Wahrheitswert auch stets die zu beurteilende Zeichenfolge ausgegeben wird.
Sollausgabe
= false
0 false
3d false
int false
true false
x true
alpha true
alpha3 true
alpha.beta true