Ausdrücke:Javakurs: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 32: Zeile 32:
Beispiel:
Beispiel:
<pre>int a = 5;
<pre>int a = 5;
int b = a++;
System.println(String.format("a = 5; 2 * a++ = %d", 2 * a++));
System.println(String.format("a = 5; 2 * a++ = %d", 2 * a++));
System.println(String.format("a: %d", a));
System.println(String.format("a: %d", a));
Zeile 58: Zeile 59:
| '==' '!='
| '==' '!='
| Vergleich: gleich, ungleich
| Vergleich: gleich, ungleich
| n == 0 && m != 3
| n == 0 && m != 3 boolean equal = radius1 == radius2;
|-
|-
| <nowiki>'<' '>' '<=' '>='</nowiki>
| <nowiki>'<' '>' '<=' '>='</nowiki>
Zeile 83: Zeile 84:
<pre><nowiki><condition> '?' <true-expression> ':' <false-expression></nowiki>
<pre><nowiki><condition> '?' <true-expression> ':' <false-expression></nowiki>
</pre>
</pre>
Es wird die Bedingung ausgeführt. Liefert diese den Wert true, ist das Ergebnis der erste Ausdruck,
Es wird die Bedingung ausgewertet. Liefert diese den Wert true, ist das Ergebnis der erste Ausdruck,
sonst der zweite.
sonst der zweite.


Zeile 89: Zeile 90:
<pre>
<pre>
column % 2 == 0 ? "blue" : "red";
column % 2 == 0 ? "blue" : "red";
</pre>
== Der '+'-Operator für Strings ==
Der Datentyp String kennt genau einen Operator, das '+'.
Damit können Strings oder auch char-Ausdrücke zusammengesetzt werden.
=== Beispiel ===
<pre>
String s = "Hello";
char separator = ' ';
s = s + separator + "world";
</pre>
</pre>


Zeile 100: Zeile 112:
<pre>int a = 1;
<pre>int a = 1;
float f = a / 2;
float f = a / 2;
System.out.println(String.format("1/2 = %.3f", f);
System.out.println(String.format("1/2 = %.3f", f));
System.out.println(String.format("1/2.0 = %.3f", a / 2.0));
System.out.println(String.format("1/2.0 = %.3f", a / 2.0));
</pre>
</pre>
Zeile 131: Zeile 143:


Die Kurzfassung:
Die Kurzfassung:
* Für die arithmethischen Operatoren gilt die Rangfolge wie in Mathematik: Punkt vor Strich.
* Für die arithmethischen Operatoren gilt die Rangfolge wie in der Mathematik: Punkt vor Strich.
* Arithmethik bindet stärker als Vergleiche
* Arithmethik bindet stärker als Vergleiche
* Boolsche Operatoren binden schwächer als Vergleiche. '&&' bindet stärker als '||'.
* Boolsche Operatoren binden schwächer als Vergleiche. '&&' bindet stärker als '||'.
Zeile 139: Zeile 151:
=== Beispiel ===
=== Beispiel ===
<pre>int x = ...;
<pre>int x = ...;
int a = 0 >= x && x < 10 || x >= 20 && x < 30;
boolean a = 0 >= x && x < 10 || x >= 20 && x < 30;
</pre>
</pre>
ist äquivalent zu:
ist äquivalent zu:
Zeile 153: Zeile 165:
</pre>
</pre>
* Gegeben: x Gesucht: liegt x im Intervall [1991, 2009]
* Gegeben: x Gesucht: liegt x im Intervall [1991, 2009]
<pre>int x = ...;
<pre>int x = 1991;
bool inMarcsYouth = ...;
boolean inMarcsYouth = ...;
</pre>
</pre>
* Gegeben: eine Zahl x. Gesucht: 0 wenn x gleich 0, -1 wenn x negativ, +1 wenn x positiv
* Gegeben: eine Zahl x. Gesucht: 0 wenn x gleich 0, -1 wenn x negativ, +1 wenn x positiv
<pre>int x = ...;
<pre>int x = 1; // oder -2 oder 0 oder 5
int sign = ...;
int sign = ...;
</pre>
</pre>

Aktuelle Version vom 16. Oktober 2015, 22:51 Uhr


Übersicht

Theorie[Bearbeiten]

Ein Ausdruck ist eine Verknüpfung von Operanden mittels Operatoren.

Es gibt 1-, 2- und 3-stellige Operatoren.

1-stellige Operatoren[Bearbeiten]

Operator Bemerkung Beispiele
'-' negiert einen artithmetischen Ausdruck - (a + b)
'!' negiert einen boolschen Ausdruck ! again

Inkrement, Decrement[Bearbeiten]

Einen Sonderfall bilden die 4 Operatoren Post-Increment, Pre-Increment, Post-Decrement und Pre-Decrement. Sie können nur auf Variablen angewendet werden, nicht auf Konstanten oder andere Ausdrücke.

Die 2 Post-Operatoren verändern den Wert der Variablen nach der Auswertung, die Pre-Operatoren vorher.

Beispiel:

int a = 5;
int b = a++;
System.println(String.format("a = 5; 2 * a++ = %d", 2 * a++));
System.println(String.format("a: %d", a));

a = 5;
System.println(String.format("a = 5; 2 * --a = %d", 2 * --a));
System.println(String.format("a: %d", a));

Ausgabe:

a = 5; 2 * a++ = 10
a: 6
a = 5; 2 * --a = 8
a: 4

2-stellige Operatoren[Bearbeiten]

Operatoren Bemerkung Beispiele
'+' '-' '*' '/' '%' Arithmetik: addieren, subtrahieren, multiplizieren, dividieren, modulo a + b*c - (d % 2)
'==' '!=' Vergleich: gleich, ungleich n == 0 && m != 3 boolean equal = radius1 == radius2;
'<' '>' '<=' '>=' Vergleich mit Sortierung: kleiner, größer, kleiner gleich, größer gleich n >= 0 && n < max
'||' '&&' boolsche Arithmetik a || b && c
'|' '&' '^' Bit-Manipulation (b & (c ^ 0xff))
'=' '+=' '-=' '/=' '*=' '%=' Zuweisung a = (b = 5) + 1; a += 5;

Beachte: Der Operator "gleich" ist '==' (2 mal '='), nicht mit der Zuweisung '=' verwechseln!

3-stelliger Operator[Bearbeiten]

Es gibt genau einen 3-stelligen Operator, den bedingten Ausdruck:

<condition> '?' <true-expression> ':' <false-expression>

Es wird die Bedingung ausgewertet. Liefert diese den Wert true, ist das Ergebnis der erste Ausdruck, sonst der zweite.

Beispiel:

column % 2 == 0 ? "blue" : "red";

Der '+'-Operator für Strings[Bearbeiten]

Der Datentyp String kennt genau einen Operator, das '+'. Damit können Strings oder auch char-Ausdrücke zusammengesetzt werden.

Beispiel[Bearbeiten]

String s = "Hello";
char separator = ' ';
s = s + separator + "world";

Automatische Typanpassung in Ausdrücken[Bearbeiten]

Werden verschieden Datentypen mit einem Operator verknüft, passieren automatische Anpassungen.

  • Der "eingeschränktere" Operand wird in den umfassenderen Typ gewandelt.
  • Reihenfolge der Typen: int long float double
  • Da die Zuweisung auch ein Operator ist, gilt das auch für Zuweisungen: Wird an eine double-Variable ein int-Wert zugewiesen, wird automatisch konvertiert.

Beispiele:

  • Ist ein Operand ein int, der andere ein float, wird der int-Operand automatisch in float gewandelt und die Operation findet mit 2 float statt.
int a = 1;
float f = a / 2;
System.out.println(String.format("1/2 = %.3f", f));
System.out.println(String.format("1/2.0 = %.3f", a / 2.0));

Ausgabe:

1/2 = 0.000
1/2.0 = 0.500

Explizite Typwandlung (Cast)[Bearbeiten]

Soll ein Datentyp in einen anderen konvertiert werden, geschiet dies mit dem Cast-Operator:

Syntax[Bearbeiten]

'(' <data-type>')' <expr>

Beispiel[Bearbeiten]

double x = (double) 25;
x = (double) 5 / 3;

Hinweis: Der Cast-Operator bindet stärker als das '/', dies entspricht also dem Ausdruck

x = ((double) 5) / 3;

Vorrangregeln (Prefärenzen)[Bearbeiten]

Für jeden Operator gibt es einen Vorrang-Grad. Haben 2 Operatoren verschiedene Vorrang-Grade, wird zuerst die Operation mit dem höheren Grad ausgeführt. Mit Klammern kann man die Vorrangregeln umgehen.

Die Kurzfassung:

  • Für die arithmethischen Operatoren gilt die Rangfolge wie in der Mathematik: Punkt vor Strich.
  • Arithmethik bindet stärker als Vergleiche
  • Boolsche Operatoren binden schwächer als Vergleiche. '&&' bindet stärker als '||'.
  • Die Zuweisung bindet schwächer als alle anderen Operatoren.

Ausführlich: Operator-Präferenzen

Beispiel[Bearbeiten]

int x = ...;
boolean a = 0 >= x && x < 10 || x >= 20 && x < 30;

ist äquivalent zu:

int a = ( ( (0 >= x) && (x < 10) ) || ( (x >= 20) && (x < 30) ) );

Aufgaben[Bearbeiten]

  • Gegeben: Dauer in Sekunden: duration gesucht: Stunden hour, Minuten min, Sekunden sec
int duration = 123483;
int hour = ...;
int min = ....;
int sec = ....;
  • Gegeben: x Gesucht: liegt x im Intervall [1991, 2009]
int x = 1991;
boolean inMarcsYouth = ...;
  • Gegeben: eine Zahl x. Gesucht: 0 wenn x gleich 0, -1 wenn x negativ, +1 wenn x positiv
int x = 1; // oder -2 oder 0 oder 5
int sign = ...;