Inhaltsverzeichnis
Variablen
Variablen in der Mathematik
Ihr kennt das Wort „Variable“ sicher aus der Mathematik. Dort ist eine Variable ein Platzhalter, für den beliebige Elemente einer Menge („Grundmenge“) eingesetzt werden können, z.B.
$$x\in \mathbb{R}$$
Oft interessiert man sich in der Mathematik dafür, für welche Belegungen der Variable $x$ eine Aussage, z.B.
$$ 3\cdot x + 2 = x + 10$$
wahr ist. Die Menge dieser Zahlen nennt man Lösungsmenge $\mathbb{L}$. Im gegebenen Beispiel ist $\mathbb{L} = \{4\}$.
Jetzt, wo Ihr Euch in Erinnerung gerufen habt, was der Begriff „Variable“ in der Mathematik bedeutet, kann ich viele von Euch auch gleich wieder beruhigen:
Variablen in der Informatik unterscheiden sich deutlich von Variablen in der Mathematik und (da kann ich Dich beruhigen!) sie sind viel einfacher zu verstehen!
Variablen in der Informatik
Eine Variable ist ein benannter Speicherplatz. Jede Variable hat einen Bezeichner (also einen Namen) und einen Datentyp. Der Datentyp legt fest, welche Werte die Variable speichern kann.
Vor der ersten Verwendung einer Variable müssen wir sie deklarieren. Dazu schreiben wir einfach den Datentyp der Variablen und dahinter den Bezeichner.
Beispiel:
int a;
Die hier deklarierte Variable trägt den Bezeichner a
und hat den Datentyp int. int ist eine Kurzform für „integer number“, also „ganze Zahl“.
Beispiel 1: Wertzuweisung, Berechnung von Termwerten
Führe das Programm in Einzelschritten aus („Step over“: ), und zwar
- zunächst mit offenem Tab „Ausgabe“ auf der rechten Seite
- dann mit offenem Tab „Variablen“ auf der rechten Seite.
Beobachte genau, was jede einzelne der Programmanweisungen bewirkt!
Erklärung der einzelnen Anweisungen
int a;
Diese Anweisung deklariert die Variable a
mit dem Datentyp int. Der Computer reserviert genug Speicherplatz zum Speichern einer ganzen Zahl (int
) und merkt sich, dass dieser Speicherplatz a
heißt. Als „Startwert“ schreibt der Computer bei Variablen vom Datentyp int
die Zahl 0 in den Speicherplatz. Wir sagen: „a
hat den Wert 0.“.
a = 12;
Diese Anweisung hat es in sich: Das Gleichheitszeichen =
bewirkt in Java nicht, dass die Terme auf der rechten und linken Seite verglichen werden, sondern es ist der Wertzuweisungsoperator dieser Programmiersprache. Das bedeutet: Der Computer wertet den Term rechts vom =
aus und schreibt den Termwert (in diesem Fall einfach die Zahl 12) in die Variable a
. Der vorherige Wert der Variable wird dabei überschrieben.
Möchte man in Java den Wert zweier Terme vergleichen, so muss man dafür den Vergleichsoperator ==
benutzen, mehr dazu später.
println(a);
Diese Anweisung schreibt nicht den Buchstaben a in die Ausgabe, sondern den Wert des Terms a
. Zum Zeitpunkt der Ausführung dieser Anweisung steht in der Variable a
der Wert 12, also wird 12 ausgegeben.
Will man den Buchstaben a ausgeben, dann verwendet man die Anweisung println(„a“);
Ist ein Text in Gänsefüßchen („
) eingeschlossen, dann stellt er für Java eine Zeichenkette dar. „a“
ist so eine Zeichenkette. Zeichenketten werden durch die Anweisung println
einfach wörtlich ausgegeben.
Schreibt man etwas nicht in Anführungszeichen, so ist es für Java entweder eine Anweisung oder ein Term. Der Computer versucht diesen Text dann auszuwerten und gibt einen Fehler aus, wenn er ihn nicht versteht.
println(3*a + 5);
Der Text 3*a + 5
ist nicht in Anführungszeichen eingeschlossen. Java interpretiert ihn also als Term und bestimmt seinen Wert, in diesem Fall $3 \cdot 12 + 5 = 41$.
println("a"); println("3*a + 5");
Die Texte „a“
und „3*a + 5“
sind jetzt in Anführungszeichen eingeschlossen. Es handelt sich also um Zeichenketten, die wörtlich ausgegeben werden.
Beispiel 2: Rätsel
Schau' Dir das Programm zuerst an, ohne es zu starten. Überlege Dir bei jedem Programmschritt:
- Welche Variablen gibt es gerade?
- Welche Werte haben sie gerade?
Was meinst Du: Welche Werte geben die println
-Anweisungen in der Ausgabe aus?
Führe dann das Programm in Einzelschritten aus („Step over“: ) und überprüfe, ob Du richtig vermutet hast!
Erklärung der einzelnen Anweisungen
In der folgenden Tabelle zeige ich Dir, welche Variablen es nach Ausführung der einzelnen Anweisungen gibt und welche Werte sie tragen.
Anweisung | Variablen und deren Werte | Erklärung |
---|---|---|
int a; | a: 0 | a wird deklariert und erhält den Wert 0. |
a = 5; | a: 5 | Der Variablen a wird der Wert 5 zugewiesen. Jetzt steht die Zahl 5 in der Variablen a . |
int b; | a: 5 b: 0 | b wird deklariert und erhält den Wert 0. |
b = a + 3; | a: 5 b: 8 | Der Term a + 3 wird ausgewertet. Sein Wert (8) wird der Variablen b zugewiesen. |
println(a) | a: 5 b : 8 | Der Wert von a (also die Zahl 5) wird ausgegeben. |
println(b) | a: 5 b : 8 | Der Wert von b (also die Zahl 8) wird ausgegeben. |
a = b * 2; | a: 16 b: 8 | Der Term b * 2 wird ausgewertet. Sein Wert (16) wird der Variablen a zugewiesen. |
println(a) | a: 16 b : 8 | Der Wert von a (also die Zahl 16) wird ausgegeben. |
println(b) | a: 16 b : 8 | Der Wert von b (also die Zahl 8) wird ausgegeben. |
Wie kann ich mir eine Variable vorstellen?
Stell Dir eine Variable am besten als beschriftete Schachtel vor, in der genau ein Wert (im Fall einer Variablen vom Typ int
genau eine ganze Zahl) reinpasst:
Eine Wertzuweisung (z.B. a = b * 2.5
) bewirkt, dass der alte Wert weggeworfen und der neue reingetan wird. Nach der Wertzuweisung liegt ein neuer Zustand vor:
Beispiel 3: Erhöhung des Wertes einer Variablen
Jetzt wird es geheimnisvoll: Welchen Wert gibt das folgende Programm aus?
Bei der Ausführung der Anweisung a = a + 1;
wird zunächst den Wert des Terms a + 1
auf der rechten Seite ausgewertet. Der Termwert ist $37 + 1 = 38$. Dieser Wert wird dann der Variablen a
zugewiesen, so dass nach der Ausführung der Anweisung die Variable a
den Wert 38
enthält.
Die Anweisung a = a + 1;
erhöht den Wert der Variablen a
also um 1
.
Wichtig:
Der Computer versucht nicht, die Gleichung $a = a + 1$ zu lösen (deren Lösungsmenge leer ist), denn =
ist nicht der Vergleichsoperator, sondern der Wertzuweisungsoperator, der einfach nur bewirkt, dass der Wert des Terms a + 1
in die Variable a
geschrieben wird.
Beim Programmieren kommt es sehr oft vor, dass der Wert einer Variable um einen konstanten Wert erhöht werden muss, daher gibt es dafür eine Kurzschreibweise. Statt a = a + 5;
kann man beispielsweise kurz schreiben: a += 5;
.
Spezialfall:
Soll der Wert einer Variablen um 1
erhöht werden, so kann man noch kürzer schreiben: a++;
.
Das Erniedrigen einer Variable geht übrigens entsprechend. b = b - 12;
erniedrigt den Wert von b
um 12
, kurz: b -= 12;
. Auch das Erniedrigen um 1
gibt es als Ultrakurzversion:
b--;
Probiere es gleich hier aus:
Deklaration und Wertzuweisung in einem Aufwasch
Oft deklariert man eine neue Variable und weist ihr gleich danach ihren Startwert zu, z.B.
int k; k = 14;
Diese beiden Anweisungen darf man zu einer einzigen zusammenfassen:
int k = 14;
Form der Bezeichner:
Die Namen der Variablen (wir Informatiker sagen Bezeichner dazu, englisch: identifier) sind nicht nur auf einzelne Kleinbuchstaben beschränkt, sondern dürfen Kleinbuchstaben, Großbuchstaben, Ziffern und Unterstriche (_
) enthalten. Auch Umlaute (ä, ö, ü, …) sind erlaubt. Ein Variablenbezeichner darf nicht mit einer Ziffer beginnen.
Beispiele für gültige Variablenbezeichner:
Anzahl
, K
, a12_x
, f1
usw.
Tastatureingabe
Mit der Anweisungen Input.readInt(„Gib eine Zahl ein:“)
kann man eine Zahl per Tastatureingabe vom Benutzer entgegennehmen.
Kommt Dir die Punktschreibweise noch bekannt vor?
Ein letztes Beispiel
Zum Schluss nochmal ein Rätsel: Welche Zahl gibt das Programm aus?