Part 1

Berechnungen mit Zahlen

Hinweis: Die Unterschediung zwischen primitiven Datentypen und Referenztypen wird in einem späteren Teil der Vorlesung eingeführt.

Die grundlegenden mathematischen Operationen sind sowohl vertraut als auch einfach: Addition +, Subtraktion -, Multiplikation * und Division /. Auch die Reihenfolge der Operationen ist vertraut: Berechnungen werden von links nach rechts unter Berücksichtigung der Klammern durchgeführt. Ausdrücke, die * und / enthalten, werden vor denen mit + und - berechnet, wie es in der Mathematik der Grundschule üblich ist.

int first = 2;
System.out.println(first); // prints 2
int second = 4;
System.out.println(second); // prints 4

int sum = first + second; // The sum of the values of the variables first and second is assigned to the variable sum
System.out.println(sum); // prints 6

Priorität und Klammern

Sie können die Reihenfolge der Operationen durch die Verwendung von Klammern beeinflussen. Operationen innerhalb von Klammern werden vor denen außerhalb ausgeführt.

int calculationWithParentheses = (1 + 1) + 3 * (2 + 5);
System.out.println(calculationWithParentheses); // prints 23

int calculationWithoutParentheses = 1 + 1 + 3 * 2 + 5;
System.out.println(calculationWithoutParentheses); // prints 13

Das obige Beispiel kann auch in Schritte unterteilt werden.

int calculationWithParentheses = (1 + 1);
System.out.println(calculationWithParentheses); // prints 2/vi
calculationWithParentheses = calculationWithParentheses + 3 * (2 + 5);
System.out.println(calculationWithParentheses); // prints 23

int calculationWithoutParentheses = 1 + 1;
calculationWithoutParentheses = calculationWithoutParentheses + 3 * 2;
calculationWithoutParentheses = calculationWithoutParentheses + 5;
System.out.println(calculationWithoutParentheses); // prints 13
Loading
Quiz

Loading...

Ein Ausdruck wird an der Stelle im Quellcode des Programms ausgewertet, an der er vorkommt. Daher kann die Auswertung auch innerhalb einer Ausgabeanweisung erfolgen, wenn der Ausdruck zur Berechnung des Wertes des Parameters der Ausgabeanweisung verwendet wird.

int first = 2;
int second = 4;

System.out.println(first + second); // prints 6
System.out.println(2 + second - first - second); // prints 0

Ein Ausdruck ändert den in einer Variablen gespeicherten Wert nicht, es sei denn, das Ergebnis des Ausdrucks wird einer Variablen zugewiesen oder als Parameter verwendet, z.B. in einer Ausgabeanweisung.

int first = 2;
int second = 4;

// der folgende Ausdruck funktioniert nicht einmal, da
// das Ergebnis keiner Variablen zugewiesen wird
// oder als Parameter an eine Ausgabeanweisung übergeben wird
first + second;
Quiz

Loading...

Berechnen und Ausgeben

Der Befehl System.out.println gibt den Wert einer Variablen aus. Die Zeichenfolge, welche im folgenden Beispiel durch Anführungszeichen gekennzeichnet ist, kann durch die Operation + mit anderem Inhalt verknüpft werden.

int length = 42;
System.out.println("Length " + length);
Beispielausgabe

Length 42

System.out.println("here is an integer --> " + 2);
System.out.println(2 + " <-- here is an integer");
Beispielausgabe

here is an integer —> 2 2 <— here is an integer

Wenn einer der Operanden der Operation + eine Zeichenkette ist, wird der andere Operand während der Programmausführung ebenfalls in eine Zeichenkette umgewandelt. Im folgenden Beispiel wird die Ganzzahl 2 in die Zeichenkette "2" umgewandelt, und eine Zeichenkette wurde daran angehängt.

Die zuvor eingeführte Priorität gilt auch hier:

System.out.println("Four: " + (2 + 2));
System.out.println("But! Twenty-two: " + 2 + 2);
Beispielausgabe

Four: 4 But! Twenty-two: 22

Loading...
Loading
Loading

Durch Anwenden dieses Wissens können wir einen Ausdruck erstellen, der aus etwas Text und einer Variablen besteht, und der in Verbindung mit der Ausgabe ausgewertet wird:

int x = 10;

System.out.println("The value of the variable x is: " + x);

int y = 5;
int z = 6;

System.out.println("y is " + y + " and z is " + z);
Beispielausgabe

The value of the variable x is: 10 y is 5 and z is 6

Loading
Loading
Sobald Sie die vorherige Übung abgeschlossen haben, versuchen Sie herauszufinden, was das größte mögliche Produkt ist, das Sie berechnen können. Der Grund für das Phänomen, das Sie beobachten werden, ist, dass der Wert einer Ganzzahlvariablen auf das Maximum von 231-1 (d.h. 2147483647) begrenzt ist. Dies liegt daran, dass Ganzzahlvariablen im Speicher des Computers mit 32 Bit dargestellt werden. Die Darstellung von Variablen wird in späteren Kursen Ihres Studiums ausführlicher behandelt.

Division

Die Division von Ganzzahlen ist eine etwas schwierigere Operation. Der Typ der Variablen, die an der Division beteiligt sind, bestimmt den Typ des Ergebnisses, das durch Ausführung des Befehls erzielt wird. Wenn alle Variablen im Divisionsausdruck Ganzzahlen sind, ist auch der resultierende Wert eine Ganzzahl.

int result = 3 / 2;
System.out.println(result);
Beispielausgabe

1

Das obige Beispiel gibt 1 aus: Sowohl 3 als auch 2 sind Ganzzahlen, und die Division von zwei Ganzzahlen ergibt immer eine Ganzzahl.

int first = 3;
int second = 2;
double result = first / second;
System.out.println(result);
Beispielausgabe

1

Die Ausgabe ist erneut 1, da first und second (immer noch) Ganzzahlen sind.

Wenn der Dividend oder der Divisor (oder beide!) der Division eine Gleitkommazahl ist, ist auch das Ergebnis eine Gleitkommazahl.

double whenDividendIsFloat = 3.0 / 2;
System.out.println(whenDividendIsFloat); // prints 1.5

double whenDivisorIsFloat = 3 / 2.0;
System.out.println(whenDivisorIsFloat); // prints 1.5
Beispielausgabe

1.5 1.5

Eine Ganzzahl kann in eine Gleitkommazahl umgewandelt werden, indem eine Typumwandlungsoperation (double) davor gesetzt wird:

int first = 3;
int second = 2;

double result1 = (double) first / second;
System.out.println(result1); // prints 1.5

double result2 = first / (double) second;
System.out.println(result2); // prints 1.5

double result3 = (double) (first / second);
System.out.println(result3); // prints 1.0
Beispielausgabe

1.5 1.5 1.0

Im letzten Beispiel wird das Ergebnis "falsch" gerundet, da die Ganzzahldivision vor der Typumwandlung ausgeführt wird.

Wenn das Ergebnis einer Division einer Ganzzahlvariablen zugewiesen wird, ist das Ergebnis automatisch eine Ganzzahl.

int integer = (int) 3.0 / 2;
System.out.println(integer);
Beispielausgabe

1

Das nächste Beispiel gibt "1.5" aus; der Dividend wird in eine Gleitkommazahl umgewandelt, indem er vor der Ausführung der Division mit einer Gleitkommazahl multipliziert wird.

int dividend = 3;
int divisor = 2;

double result = 1.0 * dividend / divisor;
System.out.println(result);
Beispielausgabe

1.5

Loading
Loading
Quiz

Loading...

Loading

Missverständnisse im Zusammenhang mit dem Wert einer Variablen

Wenn ein Computer Programmcode ausführt, tut er dies Befehl für Befehl, wobei er immer genau so vorgeht, wie es im Code angegeben ist. Wenn ein Wert einer Variablen zugewiesen wird, geschieht immer dasselbe: Der Wert auf der rechten Seite des Gleichheitszeichens wird kopiert und der Variablen auf der linken Seite des Gleichheitszeichens zugewiesen (d.h. an den Ort kopiert, der durch diese Variable angegeben wird).

Es ist für Programmierende entscheidend zu verstehen, dass das Zuweisen eines Wertes zu einer Variablen immer denselben Effekt hat.

Hier sind drei häufige Missverständnisse im Zusammenhang mit der Zuweisung eines Wertes zu einer Variablen:

  • Die Wertzuweisung als Transfer statt als Kopiervorgang zu betrachten: Nachdem first = second ausgeführt wurde, wird oft angenommen, dass der Wert der Variablen second in den Wert der Variablen first übertragen wurde und dass die Variable second keinen Wert mehr enthält oder dass ihr Wert beispielsweise 0 ist. Dies ist falsch, da die Ausführung von first = second bedeutet, dass der Wert an der durch second angegebenen Stelle einfach an die durch die Variable first angegebene Stelle kopiert wird. Daher wird die Variable second nicht verändert.

  • Die Wertzuweisung als Abhängigkeit statt als Kopiervorgang zu betrachten: Nachdem first = second ausgeführt wurde, wird oft angenommen, dass jede Änderung des Wertes der Variablen second automatisch auch im Wert der Variablen first widergespiegelt wird. Dies ist falsch; die Zuweisung — also das Kopieren — ist ein einmaliges Ereignis. Es tritt nur auf, wenn der Programmcode first = second ausgeführt wird.

  • Das dritte Missverständnis betrifft die Richtung des Kopierens: Es wird oft angenommen, dass bei der Ausführung von first = second der Wert der Variablen second als Wert der Variablen first festgelegt wird. Das Missverständnis zeigt sich auch in Situationen, in denen Programmierende versehentlich z.B. 42 = value schreiben — zum Glück bieten IDEs Unterstützung bei diesem Problem.

Vielleicht ist der beste Weg, den Ablauf eines Programms zu verstehen, die Verwendung von Stift und Papier. Während Sie das Programm lesen, schreiben Sie die Namen neuer Variablen auf und notieren Sie, wie sich die Werte der Variablen im Code Zeile für Zeile ändern. Lassen Sie uns die Ausführung mit folgendem Programmcode demonstrieren:

line 1: int first = (1 + 1);
line 2: int second = first + 3 * (2 + 5);
line 3:
line 4: first = 5;
line 5:
line 6: int third = first + second;
line 7: System.out.println(first);
line 8: System.out.println(second);
line 9: System.out.println(third);

Der Ablauf des obigen Programms wurde unten aufgeschlüsselt.

Beispielausgabe

line 1: initiate a variable first line 1: copy the result of the calculation 1 + 1 as the value of the variable first line 1: the value of the variable first is 2 line 2: create the variable second line 2: calculate 2 + 5, 2 + 5 -> 7 line 2: calculate 3 * 7, 3 * 7 -> 21 line 2: calculate first + 21 line 2: copy the value of the variable first into the calculation, its value is 2 line 2: calculate 2 + 21, 2 + 21 -> 23 line 2: copy 23 to the value of the variable second line 2: the value of the variable second is 23 line 3: (empty, do nothing) line 4: copy 5 to the value of the variable first line 4: the value of the variable first is 5 line 5: (empty, do nothing) line 6: create variable third line 6: calculate first + second line 6: copy the value of the variable first into the calculation, its value is 5 line 6: calculate 5 + second line 6: copy the value of the variable second into the calculation, its value is 23 line 6: calculate 5 + 23 -> 28 line 6: copy 28 to the value of the variable third line 6: the value of the variable third is 28 line 7: print the variable first line 7: copy the value of the variable first for the print operation, its value is 5 line 7: print the value 5 line 8: print the variable second line 8: copy the value of the variable second for the print operation, its value is 23 line 8: print the value 23 line 9: print the variable third line 9: copy the value of the variable third for the print operation, its value is 28 line 9: print the value 28

Unten finden Sie eine schrittweise Visualisierung des vorherigen Programms, das den Programmcode Zeile für Zeile durchläuft — bei jedem Schritt sollten Sie darüber nachdenken, wie das Programm zu dem Ergebnis kommt, das es ausgibt.

Loading...
Quiz

Loading...

Sie haben das Ende dieses Abschnitts erreicht! Weiter zum nächsten Abschnitt: