Vergleiche in Java (Vergleiche in Java), Lektion, Seite 723805
https://www.purl.org/stefan_ram/pub/kleiner_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Vergleiche in Java 

Einführung

Der Operator »<«

Ein Ausdruck mit »<« als Hauptoperator hat den Wert »true« genau dann ergibt, wenn der Wert des linken Operanden kleiner  als der Wert des rechten Operanden ist.

Der Ausdruck »1 < 2« hat daher beispielsweisen den Wert »true«.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 1 < 2 ); }}
Protokoll
true

Der Operator »>«

Ein Ausdruck mit »<« als Hauptoperator hat den Wert »true« genau dann ergibt, wenn der Wert des linken Operanden größer  als der Wert des rechten Operanden ist.

Der Ausdruck »2 > 1« hat daher beispielsweisen den Wert »true«.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 > 1 ); }}

Vereinfachte Syntax

Syntaxdiagramm
Ausdruck
.----------. .-. .----------.
--->| Ausdruck |--->( < )-->| Ausdruck |--->
'----------' '-' '----------'
Syntaxdiagramm
Ausdruck
.----------. .-. .----------.
--->| Ausdruck |--->( > )-->| Ausdruck |--->
'----------' '-' '----------'

Mathematische Schreibweise

Die mathematische Schreibweise dieser Operatoren ist ebenfalls ‹<› bzw ‹>›.

Aussprache

Der Operator »<« wird „kleiner“, „kleiner als“ oder „ist kleiner als“ gesprochen.

Man kann »2<x« aber auch umgekehrt als „x ist größer als 2.“ aussprechen.

Der Operator »>« wird „größer“, „größer als“ oder „ist größer als“ gesprochen.

Priorität

Die folgende Tabelle gibt die Assoziativität und Priorität der bisher behandelten Operatoren wieder.

Eigenschaften

S P A (S = Stelligkeit ("Aritaet"), P = Position, A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
+ - 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< > 2 I L Vergleiche
== != 2 I L Gleichheitspruefung und Ungleichheitspruefung
= 2 I R Zuweisung

Die Priorität der Operatoren »<« und »>« ist schwächer als die der Operatoren zur arithmetischen Berechnung eines Wertes aber stärker als die der Gleichheitsprüfungen und der Zuweisungen.

Wir illustrieren die Priorität dieser Operatoren durch Auflistung einiger Ausdrücke gleicher Bedeutung.

Priorität

Ausdruck Ausdruck mit gleicher Bedeutung

false == a < 2 false ==( a < 2 )
x = a < 2 x =( a < 2 )
2 + 3 < a * -4 ( 2 + 3 )<( a * -4 )

Ausdrücke ⊚

Die Definition eines Ausdrucks wird um Ausdrücke mit dem neu vorgestellten Operator erweitert.

Syntaxdiagramm

Ausdruck

.----------.
---.------------>| Literal |------------------------------.---->
| '----------' |
| .----------. |
'------------>| Name |------------------------------'
| '----------' |
| .-. .----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---------------------'
| '-' '----------' '-' |
| .----------. |
'------------>| Aufruf |------------------------------'
| '----------' |
| .-. .----------. |
'--->( - )--->| Ausdruck |------------------------------'
| '-' '----------' |
| .-. .----------. |
'--->( + )--->| Ausdruck |------------------------------'
| '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( / )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( + )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( - )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( * )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( < )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( > )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .--. .----------. |
'------------>| Ausdruck |--->( == )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .--. .----------. |
'------------>| Ausdruck |--->( != )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .-. .----------. |
'------------>| Ausdruck |--->( = )---->| Ausdruck |----'
'----------' '-' '----------'

Typanforderungen (vereinfacht)

Bei den Operanden dieser Operatoren muß es sich um numerische Typen  handeln. Bei einer Kombination von »int« und »double« wird der int-Wert vor dem Vergleich nach »double« gewandelt.

Signaturen möglicher Vergleiche

int < int

int < double (als double < double)

double < int (als double < double)

double < double (als double < double)

Für den Operator »>« sind die entsprechenden Signaturen möglich.

Typ des Ausdrucks

Der Typ eines mit diesem Operator gebildeten Ausdrucks zum Vergleich ist immer »boolean«.

Semantik (Wert)

Bei der Auswertung dieser Operatoren werden zunächst beide Operanden ausgewertet.

Der Wert eines Vergleiches mit »<« ist »true« genau dann wenn der Wert des linken Operanden kleiner als der Wert des rechten Operanden ist.

Der Wert eines Vergleiches mit »>« ist »true« genau dann wenn der Wert des linken Operanden größer als der Wert des rechten Operanden ist.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 1 < 2 );
java.lang.System.out.println( 0.0 < 0.00 );
java.lang.System.out.println( 1.9999999999999999 < 2.0 ); }}
java.lang.System.out
true
false
false

Beispiele ⃗

Der Wert eines Aufrufs von »java.lang.Math.random()« darf nicht negativ sein.

Das folgende Programm setzt den Wert der final-Variablen »zuKlein« auf »true«, falls doch einmal gegen diese Regel verstoßen werden sollte. Wir erwarten aber keinen Verstoß gegen diese Regel und somit die Ausgabe des Wertes »false«.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double zufallszahl = java.lang.Math.random();
final boolean zuKlein = zufallszahl < 0;
java.lang.System.out.println( zuKlein ); }}

Protokoll
false

Das folgende Programm erledigt die Prüfung mit einer Methode.

Main.java

public final class Main
{

public static boolean zuKlein( final double x )
{ return x < 0; }

public static void main( final java.lang.String[] args )
{

final double zufallszahl = java.lang.Math.random();
java.lang.System.out.println( zuKlein( zufallszahl )); }}

Protokoll
false

Der Wert eines Aufrufs von »java.lang.Math.random()« darf nicht 1 oder mehr sein.

Das folgende Programm setzt den Wert der final-Variablen »zuGross« auf »true«, falls doch einmal gegen diese Regel verstoßen werden sollte. Wir erwarten aber keinen Verstoß gegen diese Regel und somit die Ausgabe des Wertes »false«.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double zufallszahl = java.lang.Math.random();
final boolean zuGross = zufallszahl < 1 == false;
java.lang.System.out.println( zuGross ); }}

Protokoll
false

Das folgende Programm setzt den Wert der final-Variablen »schlecht« auf »true«, falls sich eine Zufallszahl außerhalb des erlaubten Bereich befindet. Wir erwarten also »false«.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{

final double zufallszahl = java.lang.Math.random();
final boolean zuKlein = zufallszahl < 0;
final boolean zuGross = zufallszahl < 1 == false;
final boolean schlecht = java.lang.Boolean.logicalOr( zuKlein, zuGross );

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

Protokoll
false

Man beachte, wie die sprechenden Variablennamen das Verständnis des Programms erleichtern.

Übungsfragen

?   Übungsfrage

Welche Ausgabe erzeugt das folgende Programm?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 < 3 ); }}

?   Übungsfrage 1

Welche Ausgabe erzeugt das folgende Programm?

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

?   Übungsfrage 2

Welche Ausgabe erzeugt das folgende Programm?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 2 + 1 < 3 ); }}

?   Übungsfrage 3

Welche Ausgabe erzeugt das folgende Programm?

Main.java

public final class Main
{

public static boolean f( final int i ){ return i < 4; }

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

Übungsaufgaben

/   Vergleichsmethode

Schreiben Sie eine möglichst kurze Deklaration einer Methode »isLess(int,int)«, die genau dann »true« ergibt, wenn der Wert des ersten Arguments ihres Aufrufs kleiner als der Wert des zweiten Arguments ihres Aufrufs ist. (Die Länge einer Methodendeklaration wird bei dieser Aufgabe durch die Anzahl der lexikalischen Einheiten jener Methodendeklaration bestimmt.)

Wenn die Methode richtig geschrieben wurde, gibt das Programm immer nur »true« aus.

Main.java

public final class Main
{

public static boolean isLess( final int i, final int j ){ … }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( isLess( 0, 0 )== false );
java.lang.System.out.println( isLess( 0, 1 )== true );
java.lang.System.out.println( isLess( 1, 0 )== false );
java.lang.System.out.println( isLess( 1, 1 )== false ); }}

transcript
true
true
true
true

/   Vergleichsmethode 1

Schreiben Sie eine Methode »isGreater(int,int)«, die genau dann »true« ergibt, wenn der Wert des ersten Arguments ihres Aufrufs größer als der Wert des zweiten Arguments ihres Aufrufs ist.

Wenn die Methode richtig geschrieben wurde, gibt das Programm immer nur »true« aus.

Main.java

public final class Main
{

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( isGreater( 0, 0 )== false );
java.lang.System.out.println( isGreater( 0, 1 )== false );
java.lang.System.out.println( isGreater( 1, 0 )== true );
java.lang.System.out.println( isGreater( 1, 1 )== false ); }}

transcript
true
true
true
true

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 stefanram723805 stefan_ram:723805 Vergleiche in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723805, slrprddef723805, 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/kleiner_java