Variablen

Wir erweitern nun den Hamster um ein „Gedächtnis“: Der Hamster soll sich nun Zahlen und andere Informationen in sogenannten Variablen merken.

1. Der Energie-Hamster

Folgendes Problem soll gelöst werden. Der Hamster hat auf seiner Kachel eine ihm unbekannte Anzahl an Körnern liegen (im Bsp. rechts sind es sechs Körner). Er nimmt alle Körner auf und zählt sie dabei. Diese Anzahl merkt er sich in einer Variablen. Anschließend geht er so viele Schritte nach vorne, wie er Körner gezählt hatte.

„Für jeden Schritt verbraucht er die Energie eines Korns.“

void main()
{
    // Definition einer Variablen
    int zaehler = 0;
    
    // Erst zaehlen...
    while (kornDa())
    {
        nimm();
        // Variable um 1 erhoehen
        zaehler = zaehler + 1;
    }
    // An dieser Stelle hat die Variable
    // einen bestimmten Wert, z.B. 6.

    // Nun wird wieder runtergezaehlt:
    while (zaehler > 0)
    {
        vor();
        // Variable um 1 verringern
        zaehler = zaehler - 1;
    }
}

2. Variablen definieren

Für die oben beschriebene Aufgabe muss sich der Hamster eine Zahl merken: Die folgende Code-Zeile definiert eine Variable namens zaehler vom Datentyp int mit dem Startwert 0. Es gibt auch noch andere Datentypen, z.B. boolean (Wahrheitswerte) und float (Dezimalzahlen).

 int zaehler = 0;

3. Variablen auslesen und Vergleichsoperatoren

Vgl.operation Bedeutung
x == y gleich?
x > y größer?
x >= y größer oder gleich?
x < y kleiner?
x <= y kleiner oder gleich?

Um den aktuellen Wert einer Variablen auszulesen, genügt es, den Variablennamen zu schreiben. Da es sich bei zaehler um eine Variable vom Typ int handelt, kann dieser Wert z.B. mit einem Vergleichsoperator (z.B. > oder >=) für eine Fallunterscheidung (if/else) oder eine while-Schleife verwendet werden.

while (zaehler > 0)
{
    // Hier folgt weiterer Code
}

In rechtsstehender Tabelle sind die möglichen Vergleichsoperatoren aufgelistet. Beachte, dass x und y sowohl Variablennamen sein können, als auch durch eine konkrete Zahl ersetzt werden dürfen. Beachte ebenfalls den Unterschied in Java zwischen = (Variablendefinition/-zuweisung) und == (Vergleichsoperator).

4. Variablen zuweisen

zaehler = 5;

Um einer Variablen einen neuen Wert zuzuweisen, verwendet man den sogenannten Zuweisungsoperator. Im Folgenden darf das = nicht mit dem $=$ im mathematischen Sinne verwechselt werden. Vielmehr sagt die folgende Zeile: „Schreibe den Wert 5 in die Variable zaehler.“

zaehler = zaehler + 1;

Manchmal wird eine Variable in einem einzigen Befehl sowohl ausgelesen, als auch beschrieben. Wichtig ist zu verstehen, dass erst gelesen wird, und anschließend geschrieben. Die Code-Zeile rechts hat also zur Folge, dass der Wert in der Variablen zaehler um 1 erhöht wird. An dieser Stelle wird noch einmal besonders klar, dass es sich bei = nicht um das mathematische $=$ handeln kann.

Es können die üblichen Rechenoperatoren + und - und * und / verwendet werden, sowie Klammern ( und ) zur Festlegung der Reihenfolge.

zaehler++;
zaehler--;

Da es häufig vorkommt, dass eine Variable um 1 erhöht oder verringert werden soll, gibt es die rechtsstehenden Kurzschreibweisen. Die Fachbegriffe sind inkrementieren (um eins erhöhen) und dekrementieren (um eins verringern). Von nun an verwenden wir immer die Kurzschreibweise.

5. Schleife zum Zählen verwenden

Betrachte nun noch einmal den Energie-Hamster aus Abschnitt 1. Im Wesentlichen werden zwei Zählvorgänge ausgeführt.

int i = 42;
while (i > 0)
{
    vor();
    i--;
}
  1. Zunächst wird die Variable zaehler so lange hochgezählt (Z. 11), wie Körner vorhanden sind (Schleifenbed. in Z. 7).
  2. Dann wird die Variable zaehler so lange runtergezählt (Z. 21), wie ihr Wert noch größer als 0 ist (Schleifenbed. in Z. 17).

Diesen Mechanismus kann man auch verwenden, um einen Programmblock eine vorgegebene Anzahl an Durchläufen ausführen zu lassen. Z.B. lässt das rechtsstehende Programm den Hamster 42 Schritte tun.

6. Gültigkeitsbereich einer Variablen

Wann darf eine definierte Variable ausgelesen und zugewiesen werden? Jede Variable hat einen Gültigkeitsbereich, in welcher sie verwendet werden darf.

Eine Variable ist gültig in den Programmzeilen

Mit Block ist hiermit eine Befehlssequenz gemeint, die von { und } eingerahmt wird. Im Bsp. aus Abschnitt 1 ist die Variable zaehler gültig ab Zeile 4 bis Zeile 22, da nach dieser Zeile der umgebende Block (welcher von Z. 3 bis Z. 22 reicht) endet.

7. Ein- und Ausgabe

Zur Benutzer-Interaktion sind in den Hamster-Simulator zwei nützliche Befehle eingebaut.

void main()
{
    int zahl    = liesZahl("Bitte Zahl waehlen!");
    int quadrat = zahl * zahl;
    schreib("Die Quadratzahl von " + zahl + " lautet " + quadrat);
}