Skip to content

Latest commit

 

History

History
207 lines (158 loc) · 6.06 KB

Kap.3.adoc

File metadata and controls

207 lines (158 loc) · 6.06 KB

Frage

Operatoren kommen nur vor in __?

Antwort

Ausdrücken

Frage

Was ist mit der Priorität eines Operators gemeint? Geben Sie ein Beispiel an.

Antwort

Die Priorität gibt die Rangfolge der Operatoren bei der Auswertung (Evaluation) an. Sie kennen aus der Arithmetik die Regel zur Rangfolge "Punkt- vor Strichrechnung".

Frage

Der Minus-Operator “-” ist linksassoziativ. Was ist damit gemeint? Erklären Sie das an einem Beispiel.

Antwort

Ein nicht vollständig geklammerter Ausdruck wird entsprechend der Assoziativität der Operatoren geklammert. Bei linksassoziativen Operatoren heißt das, dass der am weitesten links stehende Ausdruck zuerst ausgewertet wird.

Beispiel: 3 - 4 - 5 wird interpretiert als (3 - 4) - 5.

Frage

Was ist der Unterschied zwischen & und &&?

Antwort

Das & ist ein bitweiser Operator (Ergebnis vom Typ int bzw. long), das && ein logischer (Ergebnis vom Typ boolean).

Frage

Die Zuweisung ist ein Operator. Das heißt, die Zuweisung hat als Ergebnis einen _?

Antwort

Wert

Frage

Anschluss an vorherige Frage: Ist der Zuweisungsoperator rechts- oder linksassoziativ? Können Sie einen Grund angeben, warum es so sein muss?

Antwort

Der Zuweisungsoperator ist rechtsassoziativ. Das ist nötig, damit der Ausdruck x = y = z = 3 funktioniert.

Frage

Es gibt drei(!) Kontexte im Zusammenhang von Ausdrücken, in denen runde Klammernpaare (…​) vorkommen. Welche sind das?

Antwort

Die ersten zwei Kontexte finden Sie in der Operatoren-Tabelle. Den dritten Kontext sollten Sie nicht vergessen!

  • Casting

  • Methodenaufrufe

  • Klammerung von Ausdrücken zur Veränderung der Priorität (Rangfolge) bei der Evaluation (Auswertung) eines Ausdrucks; Beispiel: (1 + 2) * 3, denn in 1 + 2 * 3 greift die Priorität, die Sie als "Punkt- vor Strichrechnung" kennen.

Die syntaktische Funktion von runden Klammern im Zusammenhang von Anweisungen (die Frage bezog sich auf Ausdrücke!) wie im Kopf einer Schleife, einer if-Anweisung, der Deklaration eines Methodenkopfs ist hier nicht gemeint gewesen. Die Frage bezog sich auf Ausdrücke, nicht Anweisungen!

Frage

Erklären Sie, wie die Kopfzeile im while funktioniert:

whileline = breader.readLine( != null) { …​ }

Antwort
  1. Der Variable line wird das Ergebnis des Aufrufs breader.readLine() zugewiesen.

  2. Das Ergebnis dieser Zuweisung ist der neue Wert den line erhalten hat.

  3. Dieser Wert wird mit null verglichen.

Frage

Angenommen, es gäbe den Modulo-Operator % in Java nicht. Wie müsste dann eine Implementierung mod(int x, int y) z.B. in der Math-Klasse aussehen?

Antwort
static int mod(int x, int y) {
  int d = x / y;
  return x - d * y;
}

Erinnern Sie sich an das Substitutionsprinzip, das man hier anwenden kann. Der Ausdruck zur Zwischenrechnung, dessen Ergebnis in der Variablen d gespeichert wird, kann direkt im return die Variable d ersetzen. Somit wird der Rumpf der mod-Methode zu einem Einzeiler:

  return x - (x / y) * y;

Frage

Die Kurzform x += 3 bedeutet ausführlich was?

Antwort

x = x + 3

Frage

Erläutern Sie den Unterschied von int a = n;` zu `int a = n;!

Antwort

int a = n;` entspricht den Anweisungen `int a = n; n = n + 1;`. Bei `int a = n; dreht sich die Reihenfolge um: n = n + 1; int a = n;.

Frage

Die Vergleichoperatoren wie >, , == usw. stehen für welche Typen zur Verfügung?

Antwort

Für alle primitiven Typen außer boolean und ihre Wrappertypen.

Frage

Wann kann man die Methode compareTo verwenden?

Antwort

Wenn das Objekt das Interface Comparable implementiert (siehe Kapitel 11).

Frage

Warum ist es keine gute Idee, zwei Zeichenketten mit == zu vergleichen?

Antwort

Weil damit die Identität der Referenzen überprüft wird, nicht aber der Inhalt des Strings. Für Strings und andere komplexe Datentypen sollte man die Methode equals verwenden.

Frage

Was ist der Unterschied von & und && bei boolschen Werten? In beiden Fällen ergibt sich immer das gleiche Ergebnis, z.B.:

jshell> true && false
$11 ==> false
jshell> true & false
$12 ==> false
Antwort

Der Operator && ist short-circuited (engl. für kurzgeschlossen), d.h. wenn an dem linken Operanden schon zu erkennen ist, was das Ergebnis sein muss, wird der rechte Operand überhaupt nicht mehr ausgewertet.

Frage

Wandeln Sie ein if (expr1 && expr2) {…​} so um, dass Sie nur if-Anweisungen ohne den &&-Operator verwenden!

Antwort

if (expr1) if (expr2) {…​}

Frage

Gleiche Aufgabe: Umwandlung von if (expr1 || expr2) { …​ }.

Antwort

if (expr1) { …​ } else if (expr2) { …​ }

Frage

Multiplizieren Sie eine int-Zahl mit 4 ohne die Multiplikation zu verwenden.

Antwort

zahl << 2

Frage

Warum ist der ternäre-Operator nicht mit einem if zu vergleichen? Was ist anders?

Antwort

Der ternäre-Operator ist ein Ausdruck (mit einem Ergebnis), das if ist eine Anweisung (ohne Ergebnis).

Frage

Implementieren Sie eine Methode odd(int n) (odd heißt "ungerade"), die mithilfe eines Bitoperators ermittelt, ob der übergebene Integer ungerade ist oder nicht.

Antwort
boolean odd(int n) {
  return n & 1 == 1;
}

Frage

return b == true ? false : true; Verkürzen Sie die return-Anweisung.

Antwort

return !b;