GreenfootKara

Kapitel 3: Variablen

Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber folgendes tun:

Kara soll eine Spur von fünf Kleeblättern legen.

Loop Example

Dies wäre natürlich recht einfach, wenn wir einfach putLeaf() und move() fünfmal aufrufen, jedoch wenig elegant. Schöner wäre es, wenn Kara mitzählt, wie viele Blätter er bereits abgelegt hat. Damit Kara zählen kann, braucht er ein “Gedächtnis”, d.h. konkret einen Speicher. Die Speicherplätze beim Programmieren sind durch Variablen ansprechbar.

Zählen mit Kara

int i;
i = 0;

while (i < 5) {
	putLeaf();
	move();

	i = i + 1;
}

Erklärungen

  1. Mit int i; wird Speicherplatz für eine Variable mit dem Namen i und dem Typ int, d.h. “integer”, reserviert. Man sagt: Die Variable i wird deklariert. In Java gibt es unterschiedliche Typen, die verwendet werden können (siehe nachfolgende Tabellen).
  2. Durch i = 0; wird der Variable i der Wert 0 zugewiesen. Da es die erste Wertzuweisung für die Variable ist, sagt man auch: Die Variable i wird initialisiert.
  3. Deklaration und Initialisierung werden meistens zusammengefasst wie folgt: int i = 0;
  4. Für die Bedingung i < 5 wird der Vergleichsoperator < benutzt (weitere Vergleichsoperatoren siehe nachfolgende Tabellen).
  5. Bei der Zuweisung i = i + 1; muss man zuerst den rechten Teil anschauen. Es bedeutet: “Nimm den aktuellen Wert von i, addiere 1 dazu und speichere den neuen Wert wieder unter dem Namen i ab.”

Weitere Hinweise zu Variablen

  • Es ist möglich, eine Variable mit einem endgültigen, unveränderlichen Wert zu versehen, d.h. sie zu einer Konstanten zu machen:
    final int ANZAHL = 5;
    Dann könnte man im obigen Programmbeispiel while (i < ANZAHL) schreiben.
    Konstanten schreibt man komplett mit Grossbuchstaben.
  • Variablen schreibt man wie Methoden beginnend mit einem Kleinbuchstaben!

Elementare Datentypen in Java

Diese Datentypen heissen “elementar”, da es die Grunddatentypen in Java sind. (Später werden wir lernen, wie man Variablentypen für ganze Objekte erstellen kann).

Ganze Zahlen und Zeichen

Typ von bis einschliesslich Speicherbedarf
byte -128 127 8 bit
short -32'768 32'767 16 bit
int -2'147'483'648 2'147'483'647 32 bit
long -9'223'372'036'854'775'808 9'223'372'036'854'775'807 64 bit
char 0 65'635 16 bit

Fliesskomma-Zahlen

Typ von bis einschliesslich Speicherbedarf
float -3.4 \* 1038 3.4 \* 1038 32 bit
double -1.7 \* 10308 1.7 \* 10308 64 bit

Wahrheitswerte

Typ Wertebereich Speicherbedarf
boolean true oder false 1 bit

Vergleichsoperatoren

Folgende Operatoren können in Java für Vergleiche verwendet werden. Das Ergebnis ist jeweils ein boolean (entweder true oder false).

Operator Bedeutung Beispiel
== gleich k == 2
!= ungleich k < 12
> grösser als k > 67
< kleiner als k < 12
>= grösser als oder gleich k >= 45
<= kleiner als oder gleich k <= 23

Achtung: Der Vergleich auf “Gleichheit” hat immer zwei Gleichheitszeichen ==. Mit einem einzelnen Gleichheitszeichen = geschieht eine Zuweisung!


Arithmetische Operatoren

Zur Berechnung können folgende arithmetische Operatoren verwendet werden:

Operator Bedeutung Beispiel
+ Addition h = w + 34
- Subtraktion y = 3.4 – t
* Multiplikation z = h * 3.56
/ Division d = m / v
% Modulo (liefert den Rest der Division) count = w % 2

TASK 3.01: Kara zählt Kleeblätter

TASK 3.01

Kara soll waagrecht von links nach rechts gehen bis zum Baum und dabei die Kleeblätter zählen.

Hinweise:

  • Am Schluss können Sie das Resultat mit dem folgenden Befehl auf die “Konsole” schreiben: System.out.println("Das Resultat ist: " + count);
  • Text muss man in Anführungszeichen schreiben. Das Pluszeichen bewirkt, dass die variable count hinten angefügt wird.
  • Gültigkeitsbereich von Variablen: Variablen sind immer nur innerhalb des Blockes (zwischen den geschweiften Klammern) gültig, in welchem sie deklariert wurden. Man kann sie auch ausserhalb der Methoden deklarieren, dann gelten sie für die ganze Klasse.

TASK 3.02: Kara in a Box I

TASK 3.02

Eine quadratische Fläche ist von Bäumen umrandet. Innerhalb der Fläche ist ein Muster aus Kleeblättern gelegt, das von Kara invertiert (= umgedreht) werden soll. Kara startet links oben in der Ecke mit Blick nach rechts.

Hinweise:

  • Bei dieser Aufgabe ist es hilfreich, mit booleschen Variablen zu arbeiten, z.B.:
    • Deklaration und Initilalisierung: boolean goingRight = false;
    • Aus true wird false und umgekehrt: goingRight = !goingRight;
    • Boolesche Variable als Bedingung: if (goingRight)

TASK 3.03: Kara in a Box II

TASK 3.03

Eine quadratische Fläche ist von Bäumen umrandet. Innerhalb der Fläche soll ein schachbrettartiges Muster aus Kleeblättern von Kara gelegt werden. Kara startet links oben in der Ecke mit Blick nach rechts.

TASK 3.04 (schwierig): Die längste Baumreihe

TASK 3.04

Auf der Wiese hat es verschiedene Baumreihen. Kara soll nun die Länge (in Anzahl Bäumen) der längsten Baumreihe ermitteln und auf die Konsole ausgeben. Zwischen d en Baumreihen ist immer mindestens ein Feld Platz. Auf dem letzten Feld liegt ein Kleeblatt.

TASK 3.05 (sehr schwierig): Push Mushroom Through Tunnel

TASK 3.05

Die Welt von Kara hat zwei Boxen, welche durch einen Tunnel verbunden sind. In der Box links befindet sich Kara und ein Kleeblatt. In der Box rechts befindet sich ein Pilz. Kara soll nun auf die andere Seite gelangen, den Pilz finden und ihn auf die andere Seite schieben. Auf der anderen Seite angekommen soll der Pilz schliesslich auf das Kleeblatt geschoben werden.

Sie können davon ausgehen, dass Kara immer oben links in der Ecke startet und das Kleeblatt sich unten links befindet. Der Pilz kann jedoch an einer beliebigen Stelle rechts vom Tunnel stehen.

Hints:

  • Diese Aufgabe kann auch in Zusammenarbeit zu zweit gelöst werden.
  • Dabei können die Teilprobleme untereinander aufgeteilt werden:
    • Tunneleingang finden
    • Pilz finden
    • Pilz vor den Tunneleingang stossen
    • Pilz auf das Kleeblatt stossen

Vertiefung zu Variablen

Wir hatten bereits einen ersten Kontakt zu Variablen. Nun noch ein paar zusätzliche Bemerkungen zu den verschiedenen Typen:

Elementare Datentypen

Elementare Datentypen

Elementare Datentypen sind wie Becher (im Speicher), wo der Wert direkt in eine Variable gespeichert wird.

Referenztypen

Referenztypen

Der Wert in k ist eine Referenz auf das Kara-Objekt. Mit dem Punktoperator (k.) kann k wie eine Fernbedienung auf das Kara-Objekt benutzt werden!


Credits: Ideen und Konzepte von Kara wurden entwickelt von Jürg Nievergelt, Werner Hartmann, Raimond Reichert et al. Einige Kara-Übungen basieren auf Unterlagen von Horst Gierhardt.


Wie weiter?

Fahren Sie weiter mit Kapitel 4: Sokoban Spiel