Einführung in Vergleiche in Java im Rahmen der Lehre des Programmierens mit der Programmiersprache Java (Java Vergleich Java Vergleiche Java), Lektion, Seite 722631
https://www.purl.org/stefan_ram/pub/vergleiche_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Vergleichsverbunde in Java 

Einführung

Ein Vergleichsverbund ist ein Operator, der eine Oder-Verbindung zweier Vergleiche darstellt.

Der Vergleichsverbund »<=« ist so definiert, daß die Inkarnation »x <=y « für zwei Werte »x « und »y « genau dann wahr ist, wenn »x « kleiner als »y « oder  »x « gleich »y « ist.

Der Ausdruck »1 <= 2« hat daher beispielsweise den Wert »true« (»1« ist kleiner  als »2«, auch wenn »1« nicht gleich  »2« ist).

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

Entsprechend ist die Inkarnation» x >=y « für zwei Werte »x « und »y « genau dann wahr ist, wenn »x « größer als »y « oder  »x « gleich »y « ist.

Der Ausdruck »2 >= 2« hat daher beispielsweise den Wert »true« (»2« ist zwar nicht größer  als »2«, aber gleich  »2«).

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

Morphologie

Bei den Operatoren »<=« und »>=« handelt es sich jeweils um eine lexikalische Einheit mit zwei Zeichen. Die Reihenfolge der beiden Zeichen darf darin nicht vertauscht werden, und es darf kein Leerraum zwischen die beiden Zeichen eingefügt werden.

(Andere Operatoren mit mehreren Zeichen sind »==« und »!=«.)

Syntax

In dem folgenden Syntaxdiagramm ist ein »Additiver Ausdruck« ein eingeklammerter Ausdruck, oder ein Ausdruck, dessen Hauptoperator ein Vorzeichen oder eine Grundrechenart ist.

Syntaxdiagramm
Beziehungsausdruck
.--------------------.
---.--->| Additiver Ausdruck |---------------------------------------.--->
| '--------------------' |
| .--------------------. .-. .--------------------. |
'--->| Beziehungsausdruck |--->( < )---->| Additiver Ausdruck |---'
| '--------------------' '-' '--------------------' |
| .--------------------. .-. .--------------------. |
'--->| Beziehungsausdruck |--->( > )---->| Additiver Ausdruck |---'
| '--------------------' '-' '--------------------' |
| .--------------------. .--. .--------------------. |
'--->| Beziehungsausdruck |--->( <= )--->| Additiver Ausdruck |---'
| '--------------------' '--' '--------------------' |
| .--------------------. .--. .--------------------. |
'--->| Beziehungsausdruck |--->( >= )--->| Additiver Ausdruck |---'
'--------------------' '--' '--------------------'

Syntax eines Ausdrucks ⊚

Die Syntax eines Zuweisungsausdrucks  wird nun so angepaßt, daß sie auch Beziehungsausdrücke berücksichtigt.

Syntaxdiagramm
Zuweisungsausdruck
.--------------------.
---.--->| Beziehungsausdruck |---------------------.--->
| '--------------------' |
| .------------. .-. .----------. |
'--->| Bezeichner |--->( = )---->| Ausdruck |---'
'------------' '-' '----------'

Bezeichnungen der Operanden

Die Operanden der hier vorgestellten Operatoren werden als Komparanden  („linker Komparand“, „rechter Komparand“) bezeichnet.

Mathematische Schreibweise

Ähnliche Operatoren in der Schulmathematik sind ‹› beziehungsweise ‹›.

Die mathematische Schreibweise stellt eine Art von vertikaler  Kombination eines Kleiner-Zeichens mit einem Gleich-Zeichen dar, während die Java -Schreibweise eine horizontale  Kombination dieser beiden Zeichen ist.

Aussprache

Der Operator »<=« wird meist „kleiner-gleich“ gesprochen.

Der Operator »>=« wird meist „größer-gleich“ gesprochen.

Priorität

Die Priorität und Assoziativitätsrichtung der Vergleichsoperatoren »<=« und »>=« sind wie bei den schon behandelten Vergleichen »<« und »>«.

Die folgende Tabelle gibt die Assoziativitätsrichtung und die 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

Typanforderungen (vereinfacht)

Die Typanforderungen der Vergleichsoperatoren »<=« und »>=« sind wie bei den schon behandelten Vergleichen »<« und »>«.

Typregeln

Die Typregeln der Vergleichsoperatoren »<=« und »>=« sind wie bei den schon behandelten Vergleichen »<« und »>«.

Semantik (Wert)

Auswertung der Operanden

Bei der Auswertung der Operatoren »<=« und »>=« werden zunächst beide Komparanden (von links nach rechts) ausgewertet.

Main.java

public final class Main
{

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

public static void eval( final boolean b ){}

public static void main( final java.lang.String[] args )
{ eval( print( "abc" )<= print( "def" ));
eval( print( "ghi" )<= print( "jkl" )); }}

Protokoll
abc
def
ghi
jkl

Ermittlung des Wertes

Der Wert eines Vergleiches mit »<=« ist »true« genau dann, wenn der Wert des linken Komparanden kleiner als der Wert des rechten Komparanden ist oder  wenn der Wert des linken Komparanden dem Wert des rechten Komparanden gleich ist.

Main.java

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

java.lang.System.out.println( 2 < 2 );
java.lang.System.out.println( 2 == 2 );
java.lang.System.out.println( 2 <= 2 );
java.lang.System.out.println();

java.lang.System.out.println( 2 < 3 );
java.lang.System.out.println( 2 == 3 );
java.lang.System.out.println( 2 <= 3 );
java.lang.System.out.println();

java.lang.System.out.println( 4 < 2 );
java.lang.System.out.println( 4 == 2 );
java.lang.System.out.println( 4 <= 2 ); }}

Protokoll
false
true
true

true
false
true

false
false
false

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

Main.java

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

java.lang.System.out.println( 2 > 3 );
java.lang.System.out.println( 2 == 3 );
java.lang.System.out.println( 2 >= 3 );
java.lang.System.out.println();

java.lang.System.out.println( 4 > 2 );
java.lang.System.out.println( 4 == 2 );
java.lang.System.out.println( 4 >= 2 ); }}

Protokoll
false
true
true

false
false
false

true
false
true

Die Inkarnation »x >=y « hat für zwei Werte »x « und »y « denselben Wert wie »y <=x «.

Vergleiche mit der Unzahl “not a number ” ergibt jedoch stets »false« (außer beim Operator »!=«).

Main.java

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

final double notANumber = 0.0 / 0.0;

java.lang.System.out.println( 0 <= notANumber );

java.lang.System.out.println( 0 > notANumber ); }}

Protokoll
false
false

Positive und Negative Zahlen

Zahlen ‹x› mit ‹x>0› sind positiv. Zahlen ‹x› mit ‹x≥0› sind nicht-negativ.

Zahlen ‹x› mit ‹x<0› sind negativ. Zahlen ‹x› mit ‹x≤0› sind nicht-positiv.

Die Zahl Null  ist also weder positiv noch negativ.

Übungsfragen

?   Übungsfrage

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

/   kleinergleich

Überarbeiten Sie die Deklaration des Prädikat »kleinergleich«, so daß der Operator »<=« nicht mehr darin vorkommt, aber das Prädikat dieselben Ergebnisse für dieselben Argumentwerte liefert.

Main.java

public final class Main
{

public static boolean kleinergleich( final int i, final int j )
{ return i <= j; }

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

Protokoll
true
true
true

/   Positiv

Schreiben Sie eine Deklaration eines Prädikat »positiv« mit einem int-Parameter, so daß eine Inkarnation jenes Prädikats den Wert »true« genau dann hat, wenn der Wert des Arguments jener Inkarnation positiv  ist.

Main.java

public final class Main
{

__________

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

Protokoll
true
true
true
true

Unendlich und die Unzahl *

Unendlich gilt als größer als jeder andere double-Wert (außer die Unzahl “not a number ”) und minus Unendlich gilt als kleiner als jeder andere double-Wert (außer die Unzahl “not a number ”).

Vergleiche mit der Unzahl “not a number ” auf einer Seite ergeben stets »false«, außer beim Operator »!=«, für den sich mit “not a number ” auf einer Seite stets »true« ergibt.

Main.java

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

final double infinity = 1.0 / 0.0;
final double notANumber = 0.0 / 0.0;
final double maximum = 0x1.fffffffffffffp1023;

java.lang.System.out.println( notANumber == 1 ); /* false */
java.lang.System.out.println( notANumber != 1 ); /* true */

java.lang.System.out.println( notANumber == notANumber ); /* false */
java.lang.System.out.println( notANumber != notANumber ); /* true */

java.lang.System.out.println( notANumber < notANumber ); /* false */
java.lang.System.out.println( notANumber >= notANumber ); /* false */

java.lang.System.out.println( infinity ); /* Infinity */
java.lang.System.out.println( notANumber ); /* NaN */
java.lang.System.out.println( maximum ); /* 1.7976931348623157E308 */

java.lang.System.out.println( maximum < infinity ); /* true */
java.lang.System.out.println( -infinity < infinity ); /* true */

java.lang.System.out.println( maximum < maximum + 1 ); /* false */
java.lang.System.out.println( infinity < infinity + 1 ); /* false */
java.lang.System.out.println( notANumber < infinity ); /* false */
java.lang.System.out.println( notANumber == infinity ); /* false */
java.lang.System.out.println( infinity == notANumber ); /* false */
java.lang.System.out.println( infinity < notANumber ); /* false */
java.lang.System.out.println( notANumber < notANumber ); /* false */

}}

Protokoll
false
true
false
true
false
false
Infinity
NaN
1.7976931348623157E308
true
true
false
false
false
false
false
false
false

Das folgende Programm zeigt eine übliche Art der Erkennung der Unzahl “not a number ”.

Main.java

public final class Main
{

public static boolean isNaN( final double value )
{ return value != value; }

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

final double infinity = 1.0 / 0.0;
final double notANumber = 0.0 / 0.0;

java.lang.System.out.println( isNaN( notANumber ));
java.lang.System.out.println( isNaN( 0.0 ));
java.lang.System.out.println( isNaN( 1.0 ));
java.lang.System.out.println( isNaN( infinity )); }}

Protokoll
true
false
false
false

 

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 stefanram722631 stefan_ram:722631 Java Vergleich Java Vergleiche Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722631, slrprddef722631, 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/vergleiche_java