You are viewing this post: Best laufzeitfehler 9 index außerhalb des gültigen bereichs New
Neues Update zum Thema laufzeitfehler 9 index außerhalb des gültigen bereichs
Table of Contents
Benutzungshandbuch – Java-Hamster-Modell New
Um Laufzeitfehler zu vermeiden, die ja bspw. dadurch entstehen können, dass Sie dem Hamster den Befehl vor geben, obwohl er vor einer Mauer steht, existieren drei so genannte Testbefehle. Testbefehle liefern boolesche Werte, also wahr (true) oder falsch (false):
Read more
Benutzerhandbuch
Hamstersimulator Licht
Version 2.0 (24.08.2010)
Dietrich Boles
Universität Oldenburg
Inhaltsverzeichnis
1
Einleitung
10
1.1 Das Hamstermodell 10
1.2 Der Hamstersimulator 10
1.3 Voraussetzungen.
11
1.4 Hinweise.
11
1.5 Änderungen von Version 2.0 zu Version 1.0
11
1.6 Aufbau des Benutzerhandbuchs.
12
2 Installation.
13
2.1 Voraussetzungen.
13
2.2 Download, Installation und Start 13
3 Das Java-Hamster-Modell 14
3.1 Landschaft 14
3.2 Hamster 15
3.3 Befehle
15
4 Imperative Programmierkonzepte der Programmiersprache Java
17
4.1 Grundlagen.
17
4.2 Anweisungen und Programme
17
4.2.1 Hamsterbefehle
18
4.2.2 Anweisungen
18
4.2.3 Programme
19
4.2.4 Kommentare
19
4.2.5 Beispielprogramm.
19
4.3 Prozeduren.
20
4.3.1 Prozedurdefinition.
20
4.3.2 Prozeduraufruf 21
4.3.3 Beispielprogramm.
21
4.4 Auswahlanweisungen.
22
4.4. 1 Testbefehle
22
4.4.2 Boolesche Operatoren und Ausdrücke
23
4.4.3 Blockunterricht
23
4.4.4 Bedingte Anweisung
23
4.4.5 Alternative Anweisungen
24
4.4.6 Beispielprogramm.
24
4.5 Iterationsanweisungen.
25
4.5.1 while-Anweisung
25
4.5.2 do-Anweisung
25
4.5.3 Beispielprogramm.
26
4.6 Boolesche Funktionen.
27
4.6.1 Boolesche Rückgabeanweisung
27
4.6.2 Definition von Booleschen Funktionen.
27
4.6.3 Aufruf von Booleschen Funktionen.
27
4.6.4 Beispielprogramm.
28
4.7 Variablen und Ausdrücke
28
4.7.1 Datentypen.
29
4.7.2 Variablen.
29
4.7.3 Ausdrücke
29
4.7.4 Zuordnung
30
4.7.5 Vergleichsausdrücke
31
4.7.6 Gültigkeitsbereich von Variablen.
31
4.7.7 Lebensdauer von Variablen.
31
4.7.8 Beispielprogramm.
32
4.8 int-Funktionen.
32
4.8.1 Funktionsdefinition.
32
4.8.2 Funktionsaufruf 33
4.8.3 Verallgemeinerung des Funktionskonzepts
33
4.8.4 Beispielprogramm.
33
4.9 Funktionsparameter 34
4.9.1 Formalparameter 35
4.9.2 Aktuelle Parameter 35
4.9.3 Parameterübergabe
35
4.9.4 Funktionsüberladung.
36
4.9.5 Beispielprogramm.
36
4.10 Rekursion.
37
5 Ihr erstes Hamster-Programm.
38
5.1 Die Hamster-Befehle ausprobieren
39
5.2 Entwerfen eines Hamsterreviers
39
5.3 Einstieg in ein Hamsterprogramm
42
5.4 Kompilieren eines Hamsterprogramms
43
5.5 Ein Hamsterprogramm betreiben
44
5.6 Debuggen eines Hamsterprogramms
45
5.7 Zusammenfassung
46
6 Wie man den Hamstersimulator bedient
47
6.1 Grundfunktionen.
48
6.1.1 Klicken.
48
6.1.2 Tooltips
48
6.1.3 Schaltfläche.
48
6.1.4 Menü.
49
6.1.5 Symbolleiste 50
6.1.6 Popup-Menü.
50
6.1.7 Eingabefeld
50
6.1.8 Dialogfeld
50
6.1.9 Dateiauswahldialog
51
6.1.10 Elementbaum
52
6.1.11 Geteiltes Fenster
53
6.2 Verwaltung und Bearbeitung von Hamsterprogrammen
53
6.2.1 Ein neues Hamsterprogramm schreiben
55
6.2.2 Ändern des aktuellen Hamsterprogramms
55
6.2.3 Löschen des aktuellen Hamsterprogramms
55
6.2.4 Speichern des aktuellen Hamsterprogramms
55
6.2.5 Öffnen eines gespeicherten Hamsterprogramms
55
6.2.6 Drucken eines Hamsterprogramms
56
6.2.7 Editierfunktionen.
56
6.3 Hamsterprogramme zusammenstellen.
57
6.3.1 Kompilieren.
57
6.3.2 Fehler beseitigen.
57
6.4 Hamsterreviere verwalten und gestalten.
58
6.4.1 Ändern die Größe des Hamsterreviers
59
6.4.2 Umsetzen des Hamsters im Hamsterrevier
59
6.4.3 Einstellung der Sichtlinie des Hamsters
59
6.4.4 Abfrage und Angabe der Körneranzahl im Hamstermaul
60
6.4.5 Körner auf Hamstergebietsplättchen legen
60
6.4.6 Das Platzieren von Mauern auf Hamster-Revierplättchen
60
6.4.7 Hamster-Revierplättchen löschen
61
6.4
8 Ein Hamsterrevier retten
61
6.4.9 Wiederherstellen eines gespeicherten Hamstergebiets
61
6.5 Hamster-Befehle interaktiv ausführen.
62
6.5.1 Befehlsfenster 62
6.5.2 Parameter 63
6.5.3 Rückgabewerte von Funktionen.
63
6.5.4 Befehls-Popup-Menü.
63
6.6 Ausführen von Hamsterprogrammen
63
6.6.1 Starten eines Hamsterprogramms
64
6.6.2 Stoppen eines Hamsterprogramms
64
6.6.3 Ein Hamsterprogramm pausieren
64
6.6.4 Während der Durchführung eines Hamsterprogramms
64
6.6.5 Geschwindigkeit einstellen 64
6.6.6 Wiederherstellung eines Hamsterterritoriums
65
6.7 Debuggen von Hamsterprogrammen.
65
6.7.1 Beobachten der Programmausführung
66
6.7.2 Schrittweise Programmausführung
67
6.7.3 Haltepunkte
67
6.7.4 Debugger-Fenster 68
6.8 Konsole
68
7 Beispielprogramme
71
7.1 Ein Feld beweiden.
71
7.2 Einen Berg erklimmen.
72
7.3 Einen Berg erklimmen (objektorientierte Variante) 73
8 Literatur zum Programmieren lernen
75
Programmieranfänger finden es oft schwierig zu programmieren, wenn sie ihre normale Denkweise verlassen und in eher technisch orientierten Kategorien denken müssen, die ihnen von den Programmiersprachen vorgegeben werden
Gerade am Anfang werden sie oft mit so vielen inhaltlichen und methodischen Neuerungen konfrontiert, dass sie das Wesentliche des Programmierens, nämlich das Problemlösen, aus den Augen verlieren
Mit dem Ziel, dieses Problem zu lösen, wurde das Hamstermodell entwickelt
Mit dem Hamstermodell wird Programmieranfängern ein einfaches, aber leistungsfähiges Modell an die Hand gegeben, mit dem sich die Grundkonzepte der (imperativen) Programmierung spielerisch erlernen lassen
Programmierer entwickeln sogenannte „Hamsterprogramme“, mit denen sie einen virtuellen Hamster durch eine virtuelle Landschaft steuern und bestimmte Aufgaben lösen können
Die Zahl der gleichzeitig zu berücksichtigenden Konzepte wird im Hamstermodell stark reduziert und sukzessive erweitert
Prinzipiell ist das Hamstermodell unabhängig von der Programmiersprache
Für den praktischen Einsatz des Modells wurde jedoch bewusst die Programmiersprache Java als Basis gewählt
Java – auch als „Sprache des Internets“ bezeichnet – ist eine moderne Programmiersprache, die sich in den letzten Jahren sowohl im Bildungsbereich als auch im industriellen Umfeld etabliert hat
Das Hamster-Modell ist im Buch „Programmieren gelernt mit Java -Hamster-Modell“, erschienen im Vieweg-Teubner-Verlag, ausführlich beschrieben
Viele weitere Informationen finden Sie auf der Hamster-Website im WWW unter www.java-hamster-modell. de Beim Hamster-Modell steht nicht so sehr das „Lernen durch Zuhören“ oder „Lernen durch Lesen“ im Vordergrund, sondern vielmehr das „Learning-by-Doing“, also praktische Übungen.Genau das ist mit dem Hamster-Simulator möglich Diese bietet eine Reihe von Werkzeugen zum Erstellen und Ausführen von Hamsterprogrammen: einen Editor zum Eingeben und Verwalten von Hamsterprogrammen, einen Compiler zum Übersetzen von Hamsterprogrammen, einen Gebietsdesigner zum Entwerfen und Verwalten von Hamstergebieten, einen Interpreter zum Ausführen von Hamsterprogrammen und einen Debugger Hamsterprogramme testen Der Hamstersimulator ist einfach zu bedienen, wurde aber in Funktion und Bedienung bewusst an professionelle Entwicklungsumgebungen für Java (z
B
Eclipse) angelehnt, um den späteren Umstieg zu erleichtern r gibt es einen weiteren Hamster-Simulator, der noch viele weitere Funktionen bietet (die für echte Programmier-Anfänger allerdings nicht zwingend notwendig sind)
Diese finden Sie auf der Hamster-Website www.java-hamster-modell.de
Zielgruppe des Hamstermodells sind Schüler oder Studenten ohne Programmiererfahrung, die die Grundlagen des (imperativen) Programmierens erlernen und dabei ein wenig Spaß haben möchten
Kenntnisse im Umgang mit Computern sind wünschenswert
Der Hamstersimulator ist kein Lehrbuch, sondern ein Tool, das das Erlernen des Programmierens unterstützt
Kapitel 7 (Programmierliteratur lernen) weist auf gute Lehrbücher zum Erlernen des Programmierens hin.
Das Hamstersimulatorlicht wurde mit dem Tool „Soloist“ erstellt
Solist ist eine spezielle Entwicklungsumgebung für Mini-Programmierwelt-Simulatoren
Solist ist ein Tool aus der Programming Theatre-Toolfamilie, einer Reihe von Tools zum Erlernen des Programmierens
Die Theaterwelt ist eine Metapher für all diese Werkzeuge
Schauspieler (bei Solisten „Solisten“) agieren auf einer Bühne, auf der zusätzliche Requisiten platziert werden können
Eine Performance entspricht der Ausführung eines Programms
Beim Hamstersimulator ist die Bühne das Territorium des Hamsters, auf dem der Hamster als Solist agiert (es gibt nur einen Hamster)
Requisiten sind Wände und Körner
Wer also bei der Nutzung des Hamster-Simulators auf den Begriff „Solist“ stößt, kennt nun den Hintergrund dieser Namenswahl Version 1.0 des Hamster-Simulators Light ist, dass es nun spezielle Menüpunkte zum Erstellen, Laden und Speichern von Hamster-Programmen gibt im Programmmenü oder in der Symbolleiste
Das Benutzerhandbuch ist in 8 Kapitel unterteilt
Nach dieser Einführung beschreibt Kapitel 2 die Installation des Hamstersimulators
Kapitel 3 stellt das Hamstermodell im Detail vor
Kapitel 4 gibt einen Überblick über die Programmierkonzepte der imperativen Programmierung mit dem Hamstermodell bzw
Java
Kapitel 5 gibt Ihnen eine kurze und prägnante Einführung, wie Sie Ihr erstes Hamsterprogramm zum Laufen bringen
Dieses enthält eine kurze Einführung in die Elemente und die Bedienung des Hamstersimulators
Kapitel 6 geht wesentlich detaillierter auf die einzelnen Elemente und die Bedienung des Hamstersimulators ein
Kapitel 7 demonstriert anhand einiger Beispielprogramme das Programmieren mit dem Java-Hamster
Schließlich enthält Kapitel 8 Hinweise auf gute Begleitliteratur zum Erlernen des Programmierens mit Java
Voraussetzung für den Start des Hamstersimulators ist ein Java Development Kit SE (JDK) Version 6 oder höher
Ein Java Runtime Environment SE (JRE) reicht nicht aus
Das aktuelle JDK kann von der Webseite http://java.sun.com/javase/downloads/index.jsp bezogen werden und muss anschließend installiert werden
Der Hamster-Simulator-Light kann von der Website http://www
programmierkurs-java.de/solist oder www.java-hamster-modell.de können kostenlos heruntergeladen werden
Es befindet sich in einer Datei namens hamstersimulator-light-2.0.zip
Diese muss zunächst entpackt werden
Es wird ein Ordner mit dem Namen hamstersimulator-light -2.0 (der sogenannte Simulatorordner) erstellt, in dem sich eine Datei simulator.jar befindet
Durch einen Doppelklick auf diese Datei wird der Hamstersimulator gestartet
Alternativ kann es auch in einer Konsole durch Eingabe des Befehls java -jar simulator.jar gestartet werden
Beim ersten Start sucht der Hamster-Simulator auf Ihrem Rechner nach der JDK-Installation
Wenn dieser nicht gefunden wird, werden Sie aufgefordert, den entsprechenden Pfad einzugeben
Der Pfad wird dann in einer Datei namens solist.properties im Ordner des Simulators gespeichert, wo er später wieder geändert werden kann, falls Sie beispielsweise eine neuere JDK-Version auf Ihrem Rechner installieren sollten
In der Property-Datei können Sie auch die Sprache angeben, mit der der Hamster-Simulator arbeitet
In der aktuellen Version wird allerdings nur Deutsch unterstützt
Computer können heute zur Lösung verschiedenster Aufgaben eingesetzt werden
Die Arbeitsanweisungen zur Bearbeitung der Aufgaben werden Ihnen in Form von Programmen mitgeteilt
Diese von Programmierern entwickelten Programme bestehen aus einer Reihe von Befehlen oder Anweisungen, die der Computer ausführen kann
Die Entwicklung solcher Programme nennt man Programmierung.
Das Hamstermodell ist ein spezielles didaktisches Modell zum Erlernen des Programmierens
Beim Hamstermodell übernimmt ein virtueller Hamster die Rolle des Computers
Ähnlich wie ein Computer können diesem Hamster Befehle gegeben werden, die er ausführt
Dir als Programmierer werden bestimmte Aufgaben gestellt, die du lösen musst, indem du den Hamster steuerst
Solche Tasks werden im Folgenden als Hamster-Tasks bezeichnet
Für diese Aufgaben müssen Sie Programme – sogenannte Hamsterprogramme – in der Hamstersprache – einer Programmiersprache, die fast vollständig der Programmiersprache Java entspricht – entwickeln, die die Aufgaben korrekt und vollständig lösen
Die Aufgaben werden nach und nach komplexer
Zur Lösung der Aufgaben müssen bestimmte Programmierkonzepte verwendet werden, die schrittweise in das Hamstermodell eingeführt werden
Die Grundidee des Hamstermodells ist denkbar einfach: Sie als Programmierer müssen einen (virtuellen) Hamster durch eine (virtuelle) Landschaft steuern und die ihm gestellten Aufgaben lösen lassen
Die Welt, in der der Hamster lebt wird durch eine gekachelte Ebene dargestellt
Abbildung 3.1 zeigt eine typische Hamsterlandschaft – auch Hamsterrevier genannt
Die Größe der Landschaft, also die Anzahl der Kacheln, ist nicht explizit vorgegeben
Die Landschaft ist beliebig, aber nie unendlich groß
Auf einzelnen Kacheln können ein oder mehrere Körner liegen
Kacheln mit Körnungen sind in den Landschaftsskizzen mit einem speziellen Körnungssymbol gekennzeichnet
Hamster-Territorium-Kacheln können immer noch Wände haben, was bedeutet, dass diese Kacheln blockiert sind
Der Hamster kann sie nicht betreten
Es ist nicht möglich, dass eine Fliese sowohl eine Wand als auch Körner hat
Der Hamster kann das Revier nicht verlassen
Stellen Sie sich also vor, dass das Territorium immer vollständig von Mauern umgeben ist
Abb
3.1: Komponenten des Hamstermodells
Im Hamstermodell gibt es immer genau einen Hamster
Der Hamster steht auf einem der Plättchen des Hamsterterritoriums
Dieses Plättchen kann nicht durch eine Wand blockiert werden, aber es kann Samen enthalten
Der Hamster kann in vier verschiedenen Richtungen (Norden, Süden, Westen, Osten) auf den Plättchen stehen
Je nach Blickrichtung wird der Hamster durch unterschiedliche Symbole dargestellt
In Abbildung 3.1 blickt der Hamster nach Osten
Körner finden sich nicht nur auf einzelnen Kacheln, sondern auch im Maul des Hamsters
Der Hamster kennt vier Kommandos und drei Testkommandos, durch deren Aufruf ein Programmierer den Hamster durch ein vorgegebenes Hamsterrevier steuern kann
Man kann sich den Hamster als eine Art virtuellen Prozessor vorstellen, der im Gegensatz zu echten Computerprozessoren (zunächst) keine arithmetischen und logischen Operationen ausführen kann, aber „erkunden“ kann
Diese Befehle sind unten aufgeführt und werden im nächsten Kapitel ausführlicher vorgestellt
void forward() : Der Hamster hüpft in seiner aktuellen Blickrichtung eine Kachel vorwärts.
: Der Hamster hüpft in seiner aktuellen Blickrichtung eine Kachel vorwärts
void turnleft() : Der Hamster dreht sich auf der Kachel, auf der er gerade steht, um 90 Grad gegen den Uhrzeigersinn.
: Der Hamster dreht sich auf der Kachel, auf der er gerade steht, um 90 Grad gegen den Uhrzeigersinn
void take() : Der Hamster frisst genau ein Korn von dem Plättchen, auf dem er sich gerade befindet, d.h
der Hamster hat dann ein Korn mehr im Maul und es ist ein Korn weniger auf dem Plättchen als vorher.
: Der Hamster frisst genau ein Korn von dem Plättchen, auf dem er sich gerade befindet, d.h
der Hamster hat dann ein Korn mehr im Maul und es ist ein Korn weniger auf dem Plättchen als vorher
void get() : Der Hamster legt genau ein Korn aus seinem Maul auf das Plättchen, auf dem er sich gerade befindet, dh er hat danach ein Korn weniger im Maul, und es ist ein Korn mehr auf dem Plättchen als vorher.
: Der Hamster legt auf dem Plättchen, auf dem er gerade steht, genau ein Korn aus seinem Maul, dh er hat danach ein Korn weniger im Maul, und auf dem Plättchen ist ein Korn mehr als vorher
boolean frontFree() : Gibt den Wert true zurück, wenn auf der Kachel vor dem Hamster keine Wand ist
Wenn die Kachel von einer Wand blockiert wird, dann wird der Wert false zurückgegeben.
: Gibt den Wert zurück, wenn keine Wand auf der Kachel in Sichtlinie vor dem Hamster ist
Wenn die Kachel von einer Wand blockiert wird, wird der Wert zurückgegeben
boolean maulLeer() : gibt false zurück, wenn der Hamster ein oder mehrere Körner im Maul hat
Befinden sich keine Körner im Maul des Hamsters, wird der Wert true zurückgegeben
: Gibt den Wert zurück, wenn der Hamster ein oder mehrere Körner im Maul hat
Befinden sich keine Körner im Maul des Hamsters, wird der Wert zurückgegeben
boolean kornDa() : Gibt den Wert true zurück, wenn sich ein oder mehrere Körner auf der Kachel befinden, auf der der Hamster gerade steht
Befindet sich kein Korn auf der Kachel, wird der Wert false zurückgegeben
In diesem Kapitel werden die Kommandos, die der Hamster kennt, genauer erklärt
Außerdem enthält dieses Kapitel eine Zusammenfassung der wichtigsten Programmierkonzepte der imperativen Programmierung mit Java
Diese Konzepte werden in dem im Vieweg-Teubner-Verlag erschienenen Buch „Spielend programmieren mit dem Java-Hamster-Modell“ ausführlich vorgestellt
Wenn Sie völlig neu in der Programmierung sind, empfehle ich Ihnen, sich auf der folgenden Website (Beispiel für das Java-Hamster-Buch) mit den allgemeinen Grundlagen des Programmierens vertraut zu machen: http://www-is.informatik.uni-oldenburg.de/~ dibo/hamster/leseprobe/node3.html.
Der Zeichensatz (das Wörterbuch), den Sie beim Erstellen von Hamster-Programmen verwenden können, entspricht dem 16-Bit-Zeichensatz Unicode
Die Tokens einer Sprache, einschließlich der lexikalischen
Einheiten genannt sind die Wörter, auf denen sie basiert
Wenn Sie Ihr Programm kompilieren, zerlegt der Compiler Ihren Quellcode in Tokens und versucht herauszufinden, welche Anweisungen, Bezeichner und andere Elemente der Quellcode enthält
In Java müssen Token durch Wort-Leerzeichen getrennt werden
Der Wortabstand umfasst Leerzeichen, Tabulatoren, Zeilenumbrüche und Seitenvorschübe
Diese Zeichen, im Folgenden Trennzeichen genannt, haben keine weitere Bedeutung
Bezeichner, die zum Benennen deklarierter Elemente (wie Prozeduren oder Variablen) in Java verwendet werden, müssen mit einem Buchstaben, einem Unterstrich (_) oder einem Dollarzeichen ($) beginnen
, dem weitere Buchstaben, Unterstriche und Ziffern folgen können
Bezeichner können beliebig lang sein
In Java wird streng zwischen Groß- und Kleinschreibung unterschieden, d.h
die Bezeichner „right“ und „right“ sind unterschiedliche Bezeichner
Schlüsselwörter sind reservierte Wörter in einer Programmiersprache
Sie dürfen nicht als Identifikatoren verwendet werden
Programme bestehen aus einer Reihe von Befehlen oder Anweisungen
Die Aufgabe eines Hamsterprogrammierers besteht darin, den Hamster durch eine Landschaft zu steuern, um die gestellten Hamsteraufgaben zu lösen
Um den Hamster zu kontrollieren, müssen ihm Anweisungen in Form von Kommandos gegeben werden
Der Hamster hat die Fähigkeit, vier verschiedene Befehle zu verstehen und auszuführen: in front(); Der Hamster hüpft in seiner aktuellen Blickrichtung eine Kachel vorwärts.
Der Hamster hüpft in seiner aktuellen Blickrichtung eine Kachel vorwärts
leftTom(); Der Hamster dreht sich auf dem Plättchen, auf dem er gerade steht, um 90 Grad gegen den Uhrzeigersinn
Der Hamster dreht sich auf dem Plättchen, auf dem er gerade steht, um 90 Grad gegen den Uhrzeigersinn
nehmen(); Der Hamster frisst genau ein Korn von dem Plättchen, auf dem er sich gerade befindet, dh der Hamster hat dann ein Korn mehr im Maul und es liegt ein Korn weniger auf dem Plättchen als vorher
Der Hamster frisst von dem Plättchen, auf dem es liegt ist genau ein Korn, dh der Hamster hat danach ein Korn mehr im Maul und ein Korn weniger auf der Platte als vorher
geben Sie(); Der Hamster legt genau ein Korn aus seinem Maul auf die Kachel, auf der er sich gerade befindet, dh er hat danach ein Korn weniger im Maul, und es ist ein Korn mehr auf der Kachel als vorher
Wie Sie vielleicht bemerkt haben, kann es zu Problemen kommen mit den Befehlen vor nehmen und geben:
Der Hamster bekommt den Befehl vor(); und das Plättchen vor ihm wird von einer Wand blockiert.
und das Plättchen vor ihm wird von einer Wand blockiert
Der Hamster erhält den Befehl take(); und auf der Fliese, auf der er gerade steht, ist kein einziges Korn..
und auf der Fliese, auf der er gerade steht, ist kein einziges Korn
Der Hamster erhält den Befehl get(); und er hat kein einziges Stück Getreide im Mund
Wenn Sie den Hamster in diese Situationen bringen, die er nicht lösen kann, dann wird der Hamster so enttäuscht von Ihnen sein, dass er keine weiteren Befehle mehr ausführen will
Solche Fehler werden Laufzeitfehler genannt
Laufzeitfehler können im Allgemeinen nicht vom Compiler erkannt werden, sondern treten erst während der Ausführung eines Programms auf
Programme, die zu Laufzeitfehlern führen können, sind fehlerhaft!
In imperativen Programmiersprachen werden Verarbeitungsregeln durch sogenannte Statements ausgedrückt
Aussagen, die nicht weiter zerlegt werden können, nennt man Elementaraussagen
In der Hamstersprache sind die vier Grundkommandos elementare Anweisungen
Eine Folge von Anweisungen, die nacheinander ausgeführt werden, nennt man Anweisungsfolge
Die einzelnen Anweisungen einer Anweisungsfolge werden nacheinander in der angegebenen Reihenfolge ausgeführt
Ein Hamsterprogramm besteht aus dem Schlüsselwort void, gefolgt von main, einem Paar runder Klammern und einem Paar geschweifter Klammern, die eine Anweisungsfolge einschließen
Beim Aufruf bzw
Start des Programms werden die Anweisungen in der Anweisungsfolge innerhalb der geschweiften Klammern nacheinander ausgeführt
Ziel des Programmierens ist es, Programme zu entwickeln, die vorgegebene Aufgaben lösen
Zusätzlich zu ihrer Korrektheit und Vollständigkeit sollten Programme eine weitere Eigenschaft haben; sie sollten leicht verständlich sein
Das bedeutet, dass die Lösungsidee und die Umsetzung auch für andere Programmierer leicht verständlich und nachvollziehbar sein sollten, um beispielsweise das Programm später erweitern oder in anderen Kontexten wiederverwenden zu können
Sogenannte Kommentare dienen dazu, ein Programm zu dokumentieren
Sie haben keinen Einfluss auf die Steuerung des Hamsters
Sie machen das Programm lediglich lesbarer
Es gibt zwei Arten von Kommentaren in Java: Zeilenkommentare und Bereichskommentare
Zeilenkommentare beginnen mit zwei Schrägstrichen (//) und enden am nächsten Zeilenende
Auf die Schrägstriche kann jedes beliebige Zeichen folgen
Bereichskommentare beginnen mit der Zeichenkombination /* und enden mit der Zeichenkombination */
Dazwischen können beliebige Zeichen stehen
Bereichskommentare können sich auch über mehrere Zeilen erstrecken
Das folgende Hamsterprogramm veranlasst den Hamster, zwei Körner in dem in Abbildung 4.2 skizzierten Territorium zu fressen:
void main() {
// erste Körner essen
vor();
vor();
nehmen();
// Zweitkorn essen
leftTog();
vor();
vor();
nehmen();
}
Abb
4.2: Hamsterrevier für das Beispielprogramm
Prozeduren werden verwendet, um neue Befehle zu deklarieren
Dabei sind zwei Aspekte zu beachten: die Definition von Prozeduren und deren Aufruf, also Ausführung
Ein neuer Befehl wird durch eine Prozedurdefinition deklariert
Zum einen muss die Definition angeben, wie der Befehl heißt (Prozedurname) und zum anderen muss festgelegt werden, was der Hamster tun soll, wenn er den neuen Befehl erhält
Ersteres findet im sogenannten Verfahrenskopf statt, letzteres im sogenannten Verfahrensgremium
Das Schlüsselwort void muss zuerst im Prozedurkopf angegeben werden
Danach folgt ein Bezeichner, der Prozedurname oder der Name des neuen Befehls
Auf den Prozedurnamen folgt ein Klammerpaar, das den Prozedurkopf beendet
Der Prozedurrumpf beginnt mit einer öffnenden geschweiften Klammer, gefolgt von einer Folge von Anweisungen
Der Prozedurrumpf und damit die Prozedurdefinition endet mit einer schließenden geschweiften Klammer
Auch das oben vorgestellte Hauptkonstrukt ist im Prinzip ein Verfahren
Es wird automatisch vom Laufzeitsystem aufgerufen, wenn ein Programm gestartet wird
Eine neue Prozedur kann vor oder nach der Definition der Hauptprozedur definiert werden
Eine Prozedurdefinition leitet einen neuen Befehl ein
Ein Aufruf des neuen Befehls wird als Prozeduraufruf bezeichnet
Ein Prozeduraufruf entspricht syntaktisch dem Aufruf eines der vier Grundkommandos des Hamsters
Es beginnt mit dem Prozedurnamen
Danach folgen eine öffnende und eine schließende Klammer sowie ein Semikolon
Wenn irgendwo in einem Programm eine Prozedur aufgerufen wird, werden die Anweisungen des Prozedurkörpers an dieser Stelle ausgeführt, wenn das Programm ausgeführt wird
Beim Aufruf der Prozedur verzweigt der Kontrollfluss des Programms in den Rumpf der Prozedur, führt dort die Anweisungen aus und kehrt nach Abarbeitung der letzten Anweisung im Rumpf an die Stelle des Prozeduraufrufs zurück
Eine Prozedur kann durch den Aufruf der return-Anweisung (return;) vorzeitig verlassen werden
Im folgenden Hamsterprogramm wird eine Prozedur rightTo definiert und aufgerufen, die bewirkt, dass der Hamster dreimal nach links abbiegt, was einer Rechtsdrehung von 90 Grad entspricht
Der Hamster frisst zwei Körner in dem in Abbildung 4.3 skizzierten Revier:
void rightToggle() { // Prozedurdefinition
leftTog();
leftTog();
leftTog();
}
void main() { // main – Prozedur
// erste Körner essen
rechtsToggle(); // Prozeduraufruf
vor();
vor();
nehmen();
// Zweitkorn essen
rechtsToggle(); // Prozeduraufruf
vor();
vor();
nehmen();
}
Abb
4.3: Hamsterrevier für das Beispielprogramm
Auswahlanweisungen werden verwendet, um zuzulassen, dass bestimmte Anweisungen nur unter bestimmten Bedingungen ausgeführt werden
Um Laufzeitfehler zu vermeiden, die beispielsweise entstehen können, wenn Sie dem Hamster das Kommando geben, obwohl er vor einer Wand steht, gibt es drei sogenannte Testkommandos
Testbefehle geben boolesche Werte zurück, also true (true) oder false (false):
frontFree() : Gibt den Wert true zurück, wenn auf der Kachel vor dem Hamster keine Wand ist
Wenn die Kachel von einer Wand blockiert wird, dann wird der Wert false zurückgegeben.
: Gibt den Wert zurück, wenn keine Wand auf der Kachel in Sichtlinie vor dem Hamster ist
Wenn die Kachel von einer Wand blockiert wird, wird der Wert zurückgegeben
maulEmpty() : Gibt den Wert false zurück, wenn der Hamster ein oder mehrere Körner im Maul hat
Befinden sich keine Körner im Maul des Hamsters, wird der Wert true zurückgegeben
: Gibt den Wert zurück, wenn der Hamster ein oder mehrere Körner im Maul hat
Befinden sich keine Körner im Maul des Hamsters, wird der Wert zurückgegeben
kornDa() : Gibt den Wert true zurück, wenn auf der Kachel, auf der der Hamster gerade steht, ein oder mehrere Körner liegen
Befindet sich kein Korn auf der Kachel, wird der Wert false zurückgegeben.
Die drei Testbefehle repräsentieren einfache boolesche Ausdrücke
Ausdrücke sind Verarbeitungsanweisungen, die einen Wert berechnen und zurückgeben
Boolesche Ausdrücke geben einen booleschen Wert zurück
Kombinierte boolesche Ausdrücke können gebildet werden, indem boolesche Ausdrücke mit booleschen Operatoren verknüpft werden
Die Programmiersprache Java bietet drei boolesche Operatoren:
Der unäre Operator ! (Negation) negiert den Wahrheitswert seines Operanden, d.h
es dreht ihn um
Wenn ein boolescher Ausdruck bA true zurückgibt, dann gibt der boolesche Ausdruck !bA false zurück
Umgekehrt, wenn bA false zurückliefert, dann liefert !bA true.
(Negation) negiert den Wahrheitswert seines Operanden, d.h
es kehrt ihn um
Wenn ein boolescher Ausdruck den Wert zurückgibt, dann gibt der boolesche Ausdruck den Wert zurück
Wenn umgekehrt false zurückgegeben wird, wird
Der binäre Operator && (Konjunktion) konjugiert die Wahrheitswerte seiner beiden Operanden, d
h
er gibt genau dann den Wahrheitswert wahr zurück, wenn beide Operanden den Wert wahr zurückgeben
(Konjunktion) konjugiert die Wahrheitswerte seiner beiden Operanden , dh er gibt genau dann den Wahrheitswert zurück, wenn beide Operanden den Wert liefern
Der binäre Operator || (Disjunktion) disjunkt die Wahrheitswerte ihrer beiden Operanden, d.h
sie liefert genau dann den Wahrheitswert wahr, wenn einer ihrer Operanden oder beide ihrer Operanden den Wert wahr liefern
Der Betreiber! hat einen höheren Vorrang als der &&-Operator, der wiederum einen höheren Vorrang als || hat Betreiber besitzt
Sie können die Abarbeitungsreihenfolge der Operatoren beeinflussen, indem Sie boolesche Ausdrücke in runde Klammern setzen
Mit Hilfe der Blockanweisung können mehrere Anweisungen zu einer Einheit zusammengefasst werden
Syntaktisch ist eine Blockanweisung eine zusammengesetzte Anweisung
Innerhalb der geschweiften Klammern befindet sich eine weitere Anweisung – im Allgemeinen eine Folge von Anweisungen
Wenn eine Blockanweisung ausgeführt wird, werden die Anweisungen innerhalb der geschweiften Klammern ausgeführt
Die Bedingungsanweisung, auch if-Anweisung genannt, ist eine zusammengesetzte Anweisung
Die bedingte Anweisung beginnt mit dem Schlüsselwort if
Darauf folgt ein boolescher Ausdruck und dann eine Anweisung in runden Klammern
Diese Aussage, die im Folgenden wahre Aussage genannt wird, ist im Allgemeinen eine Blockanweisung
Wenn eine bedingte Anweisung ausgeführt wird, wird zuerst der boolesche Ausdruck innerhalb der runden Klammern ausgewertet
Wenn dieser Ausdruck den Wert true zurückgibt, also die Bedingung erfüllt ist, wird die true-Anweisung (daher der Name) ausgeführt
Wenn der boolesche Ausdruck den Wert false zurückgibt, wird die true-Anweisung nicht ausgeführt
Die alternative Anweisung ist eine bedingte Anweisung mit einem angehängten sogenannten else-Teil
Diese besteht aus dem Schlüsselwort else und einer Anweisung (falsche Anweisung) – in der Regel eine Blockanweisung
Wie die Bedingungsanweisung ist auch die Alternativanweisung eine Auswahlanweisung
Wird eine alternative Anweisung ausgeführt, wird zunächst der Wert der Bedingung (boolescher Ausdruck) ermittelt
Wenn die Bedingung erfüllt ist, d.h
der boolesche Ausdruck den Wert true zurückliefert, dann wird die true-Anweisung ausgeführt, die false-Anweisung jedoch nicht
Wenn der boolesche Ausdruck den Wert false zurückgibt, wird die false-Anweisung ausgeführt, aber nicht die true-Anweisung
Im folgenden Beispielprogramm führt der Hamster die Blockanweisung mit den Befehlen forward und leftUm nur aus, wenn keine Wand davor ist
Dann prüft er, ob auf dem aktuellen Plättchen ein Samen liegt und ob das Plättchen vor ihm frei ist
Dann, und nur dann, nimmt er das Getreide und springt ein Plättchen weiter
Andernfalls dreht es sich um 90 Grad nach links
void main() {
if (frontFree()) { // bedingte Anweisung
vor();
leftTog();
}
if (kornDa() && vornFrei()) { // alternative Anweisung
nehmen();
vor();
} anders {
leftTog();
}
}
Iterationsanweisungen – auch Schleifenanweisungen genannt – werden verwendet, um bestimmte Anweisungen mehrmals auszuführen, solange eine bestimmte Bedingung erfüllt ist
Die while-Anweisung ist eine zusammengesetzte Anweisung
Hinter dem Schlüsselwort while steht in runden Klammern ein boolscher Ausdruck, die sogenannte Schleifenbedingung
Darauf folgt die Anweisung, die möglicherweise mehrmals ausgeführt werden muss
Sie wird auch als Iterationsanweisung bezeichnet
Dies ist im Allgemeinen eine Blockanweisung
Bei der Ausführung einer while-Anweisung wird zunächst geprüft, ob die Schleifenbedingung erfüllt ist, also ob der boolesche Ausdruck den Wert wahr zurückgibt
Wenn nicht, endet die while-Anweisung sofort
Wenn die Bedingung erfüllt ist, wird die Iterationsanweisung einmal ausgeführt
Anschließend wird die Schleifenbedingung erneut ausgewertet
Wenn es immer noch erfüllt ist, wird die Iterationsanweisung noch einmal ausgeführt
Dieser Vorgang (Prüfung der Schleifenbedingung und, falls erfüllt, Ausführung der Iterationsanweisung) wird solange wiederholt, bis (hoffentlich) irgendwann die Bedingung nicht mehr erfüllt ist
Bei der Ausführung der while-Anweisung kann es vorkommen, dass die Iterationsanweisung kein einmaliges Ausführen enthält; nämlich genau dann, wenn die Schleifenbedingung beim ersten Test nicht direkt erfüllt ist
Für Fälle, in denen die Iterationsanweisung mindestens einmal ausgeführt werden muss, gibt es eine do-Anweisung – auch Do-Schleife genannt
Die Iterationsanweisung folgt auf das Schlüsselwort do, von dem die Anweisung ihren Namen hat
Der Iterationsanweisung muss das Schlüsselwort while folgen
Darauf folgt ein boolscher Ausdruck in runden Klammern – die Schleifenbedingung
Die do-Anweisung wird durch ein Semikolon abgeschlossen
Wenn eine do-Anweisung ausgeführt wird, wird zuerst die Iterationsanweisung ausgeführt
Dann wird die Schleifenbedingung überprüft
Ist sie nicht erfüllt, d.h
der boolesche Ausdruck liefert den Wert false zurück, dann endet die do-Anweisung
Wenn die Bedingung erfüllt ist, wird die Iterationsanweisung ein zweites Mal ausgeführt und anschließend die Schleifenbedingung erneut ausgewertet
Dieser Vorgang wird solange wiederholt, bis irgendwann die Schleifenbedingung nicht mehr erfüllt ist
Der Hamster steht – wie im Beispiel in Abbildung 4.4 gezeigt – vor einem regelrechten Berg unbekannter Höhe
Es sollte nach oben klettern und dort anhalten
Abb
2.4: Hamsterreviere für das Beispielprogramm
void main() {
runToMountain();
ClimbSummit();
}
void runToMountain() {
while (frontFree()) { // while – Schleife
vor();
}
}
Void Climb Summit () {
do { // do – Schleife
ClimbALevel();
} while (!frontFree());
}
Void ClimbALevel() {
leftTog();
vor();
rightToggle();
vor();
}
void rightToggle() {
leftTog();
leftTog();
leftTog();
}
Während Prozeduren verwendet werden, um den Befehlssatz des Hamsters zu erweitern, werden boolsche Funktionen verwendet, um neue Testbefehle einzuführen
Boolesche Rückgabeanweisungen werden in boolschen Funktionen benötigt, um einen boolschen Wert zu liefern
Die Syntax der boolschen Rückgabeanweisung ist sehr einfach: Dem The Auf das Schlüsselwort return folgt ein boolescher Ausdruck und ein abschließendes Semikolon
Boolesche Rückgabeanweisungen sind spezielle Anweisungen, die nur im Funktionsrumpf von booleschen Funktionen verwendet werden dürfen
Die Ausführung einer booleschen Rückgabeanweisung während der Ausführung einer booleschen Funktion führt zur sofortigen Beendigung der Funktionsausführung
Der Wert des booleschen Ausdrucks wird als sogenannter Funktionswert zurückgegeben.
Die Syntax zum Definieren einer booleschen Funktion unterscheidet sich nur geringfügig von der einer Prozedur
Anstelle von Prozedurkopf, -name und -rumpf sprechen wir hier von Funktionskopf, Funktionsname und Funktionsrumpf
Anstelle des Schlüsselwortes void bei der Definition einer Prozedur muss bei der Definition einer booleschen Funktion das Schlüsselwort boolean am Anfang des Funktionskopfes stehen
Bei der Definition boolescher Funktionen ist jedoch folgende zusätzliche Bedingung sehr wichtig: In jedem möglichen Pfad durch die Funktion muss eine boolesche return-Anweisung vorkommen!
Boolesche Funktionen können überall in einem Hamsterprogramm definiert werden, wo auch Prozeduren definiert werden können
Eine boolesche Funktion kann überall dort aufgerufen werden, wo auch einer der drei vordefinierten Testbefehle aufgerufen werden kann
Daher wird der Aufruf einer booleschen Funktion als spezieller boolescher Ausdruck betrachtet
Die Funktion wird syntaktisch aufgerufen, indem der Funktionsname gefolgt von einem Paar runder Klammern angegeben wird
Wird bei der Berechnung eines booleschen Ausdrucks eine boolesche Funktion aufgerufen, wird in den Funktionsrumpf verzweigt und die dortigen Anweisungen aufgerufen
Wenn eine boolesche return-Anweisung ausgeführt wird, wird der Funktionskörper sofort verlassen und es wird zurückgesprungen, wo die Funktion aufgerufen wurde
Der von der booleschen Rückgabeanweisung gelieferte Wert (d
h
der Funktionswert) wird verwendet, um den booleschen Ausdruck zu berechnen
Im folgenden Programm sucht sich der Hamster auf der rechten Seite eine Nische
Wenn er einen findet, geht er hinein
Bei der Suche verwendet es eine boolesche Funktion rightFree.
void returns() {
leftTog();
leftTog();
}
void rightToggle() {
kehrt zurück();
leftTog();
}
boolean rightFree() { // Definition einer booleschen Funktion
rightToggle();
if (frontFree()) {
leftTog();
gib true zurück; // boolesche Rückgabeanweisung
} anders {
leftTog();
falsch zurückgeben; // boolesche Rückgabeanweisung
}
}
void main() {
while (frontFree() &&
!rightFree()) { // eine boolesche Funktion aufrufen
vor ();
}
if (rightFree()) { // eine boolesche Funktion aufrufen
rightToggle();
vor();
}
}
Durch die Einführung von Variablen und Ausdrücken bekommt der Hamster ein “Gedächtnis” und lernt rechnen
Ein Datentyp repräsentiert Werte eines bestimmten Typs
Im Hamstermodell werden die Datentypen boolean und int verwendet
Der boolesche Datentyp stellt boolesche Werte dar, d
h
wahr und falsch
Der Datentyp int stellt ganze Zahlen zwischen −231 und 231 − 1 dar
Variablen sind Speicherbereiche („Container“), in denen Werte abgelegt werden können
Bevor sie verwendet werden können, müssen sie definiert werden
Wenn eine Variable definiert wird, erhält sie einen Namen – einen beliebigen Bezeichner
Außerdem legt die Angabe eines Datentyps fest, welche Werte die Variable speichern kann
Die folgenden Anweisungen definieren eine Variable frei zum Speichern von Booleschen Werten und eine Variable numberGrains zum Speichern von ganzen Zahlen
Der Variable free wird der Initialwert false zugewiesen, der Variablen number of grains der Wert 13
boolean free = false;
int Anzahl Körner = 13;
Ausdrücke sind spezielle Programmierkonstrukte zum Berechnen und Zurückgeben eines Werts
Sie haben bereits boolesche Ausdrücke gesehen
Sie geben boolesche Werte zurück
Boolesche Variablen können auch zur Berechnung von Booleschen Ausdrücken verwendet werden
Enthält ein boolescher Ausdruck den Namen einer booleschen Variablen, wird der aktuell in der Variablen gespeicherte Wert bei der Auswertung des booleschen Ausdrucks an der entsprechenden Stelle berücksichtigt
Arithmetische Ausdrücke stellen eine andere Art von Ausdrücken dar
Sie berechnen und liefern Werte vom Typ int, also ganze Zahlen
Arithmetische Ausdrücke können auf folgende Weise gebildet werden:
int-Literale: int-Literale werden durch Zeichenfolgen beschrieben, die aus Dezimalziffern (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) bestehen
Es gilt die Einschränkung, dass einer Zahl ungleich 0 keine „0“ vorangestellt werden darf
Gültige int-Literale sind: 0, 2, 4711, 1234560789,. ..
int-Variablenname: Der Name einer int-Variablen in einem arithmetischen Ausdruck repräsentiert den aktuell in der Variablen gespeicherten Wert
Unäre arithmetische Operatoren: Die Zeichen „+“ und „-“ kennzeichnen Vorzeichen von arithmetischen Ausdrücken
Die unären Rechenoperatoren sind rechtsassoziativ und haben die höchste Priorität aller Rechenoperatoren
Binäre Rechenoperatoren: Es gibt insgesamt fünf binäre Rechenoperatoren, mit denen jeweils zwei weitere Rechenausdrücke (die Operanden) verknüpft sind:
„+“: liefert die Summe seiner beiden Operanden (Addition) als Wert
“-“: Gibt die Differenz zwischen seinen beiden Operanden (Subtraktion) als Wert zurück
„*“: gibt das Produkt seiner beiden Operanden (Produkt) als Wert zurück
“/”: Gibt den Quotienten seiner beiden Operanden als Wert zurück; die resultierenden Nachkommastellen werden ignoriert (ganzzahlige Division); z.B
7/3 = 2
“%”: gibt den Rest einer ganzzahligen Division zurück (Modulo-Operator); zB 7%3 = 1
Die Beziehung zwischen ganzzahliger Division und Rest ist wie folgt: Wenn x und y arithmetische Ausdrücke sind, dann ist ((x/y) * y) + (x%y) = x.
Die binären arithmetischen Operatoren sind linksassoziativ
Die Operatoren „*“, „/“ und „%“ haben eine höhere Priorität als die Operatoren „+“ und „-“ („Punkt-vor-Strich-Berechnung“)
Klammern: Zur Bildung von (komplexen) arithmetischen Ausdrücken können arithmetische Ausdrücke in paarweise runde Klammern eingeschlossen werden
Damit können Sie die Priorität von arithmetischen Operatoren beeinflussen
Mit Hilfe einer Zuweisungsanweisung – auch kurz Zuweisung genannt – können Variablen neue Werte zugewiesen werden
Die alten Werte gehen dann verloren
Syntaktisch wird die Zuweisung so gebildet, dass auf den Namen der betroffenen Variablen das Zeichen = – der Zuweisungsoperator – und dann ein Ausdruck folgt
Bei booleschen Variablen muss dies ein boolescher Ausdruck sein, bei int-Variablen ein arithmetischer Ausdruck
Bei einer Zuweisung wird zunächst der Ausdruck ausgewertet und dann der errechnete Wert der Variablen auf der linken Seite des Zuweisungsoperators zugewiesen
Die Zuweisungsanweisung Zahl = Zahl + 1; Erhöht beispielsweise den Wert einer int-Variablenzahl um den Wert 1
Vergleichsausdrücke sind boolesche Ausdrücke, die zum Vergleichen von arithmetischen Ausdrücken verwendet werden
Sie liefern boolesche Werte nach folgenden Gesetzmäßigkeiten: Wenn x und y zwei arithmetische Ausdrücke sind, dann:
x == y gibt true zurück, wenn und nur wenn der von x zurückgegebene Wert gleich dem von y zurückgegebenen Wert ist (Gleichheitsoperator).
x! = y gibt true zurück, wenn und nur wenn der von x zurückgegebene Wert ungleich dem von y zurückgegebenen Wert ist (Ungleichheitsoperator)
x < y gibt true zurück, wenn und nur wenn der von x zurückgegebene Wert kleiner als der von y zurückgegebene Wert ist (Kleiner-als-Operator)
x <= y gibt true zurück, wenn und nur wenn der von x zurückgegebene Wert kleiner oder gleich ist der von y zurückgegebene Wert (Kleiner-als-Operator)
x > y gibt „true“ zurück, wenn und nur wenn der von x zurückgegebene Wert größer ist als der von y (größer-als-Operator) zurückgegebene Wert
x >= y gibt true zurück, wenn und nur wenn der von x zurückgegebene Wert größer oder gleich dem Wert ist, den y zurückgibt (Größer-gleich-Operator)
Die Vergleichsoperatoren sind linksassoziativ
Die Operatoren <, <=, > und >= haben Vorrang vor den Operatoren == und ! =
Außerdem ist zu beachten, dass die Vergleichsoperatoren eine niedrigere Priorität als die arithmetischen Operatoren und eine höhere Priorität als der Zuweisungsoperator haben.
Variablen können innerhalb von Prozeduren und Funktionen definiert werden
In diesem Fall werden sie als lokale Variablen bezeichnet
Variablen, die außerhalb von Prozeduren oder Funktionen definiert sind, werden als globale Variablen bezeichnet
Der Gültigkeitsbereich einer Variablen ist der Teil eines Programms, in dem eine Variable verwendet werden kann, d
h
in dem der Name einer Variablen verwendet werden darf
Der Gültigkeitsbereich einer lokalen Variablen erstreckt sich von der Anweisung nach der Variablendefinition bis zum Ende desselben Blocks und umfasst alle internen Blöcke
Der Gültigkeitsbereich einer globalen Variablen ist das gesamte Hamster-Programm
Innerhalb des Gültigkeitsbereichs einer Variablen darf keine andere Variable mit demselben Namen definiert werden
Während der Geltungsbereich einer booleschen Variablen zur Kompilierzeit wichtig ist, ist die Lebensdauer einer booleschen Variablen eine Größe, die zur Laufzeit relevant ist
Sie ist definiert als die Zeitspanne, die Speicher für eine Variable im Hauptspeicher reserviert ist
Dabei gilt: Die Lebensdauer einer globalen Variablen umfasst die gesamte Ausführungszeit eines Hamsterprogramms
Die Lebensdauer einer lokalen Variablen beginnt mit ihrer Definition und endet, nachdem der Block, in dem sie definiert wurde, vollständig abgearbeitet wurde
Im folgenden Programm läuft der Hamster zur nächsten Wand
Dann dreht er sich um und läuft zurück zum Startfeld
Er notiert die Anzahl der Schritte, die er gegangen ist, in einer globalen Variablen number.
int number = 0; // Globale Variable
void walkToWall() {
während (frontFree()) {
vor();
Zahl = Zahl + 1; // Abtretung
}
}
void returnToStartingPoint() {
while (count > 0) { // Vergleichsausdruck
vor ();
Zahl = Zahl – 1;
}
}
void main() {
walkToWall();
leftTog();
leftTog();
runBackToStartingPoint();
}
Boolesche Funktionen geben einen booleschen Wert zurück
Dementsprechend sind int-Funktionen Funktionen, die einen Wert vom Typ int zurückgeben, also eine ganze Zahl
Die Definition einer int-Funktion unterscheidet sich von der Definition einer booleschen Funktion nur dadurch, dass im Funktionskopf das Schlüsselwort boolean durch das Schlüsselwort int ersetzt wurde und die obligatorischen Return-Anweisungen im Funktionsrumpf einen Wert vom Typ int statt a liefern müssen Boolescher Wert
Der Aufruf von int-Funktionen entspricht einem speziellen arithmetischen Ausdruck
Int-Funktionen können daher überall dort aufgerufen werden, wo arithmetische Ausdrücke verwendet werden können
Wie der Aufruf einer booleschen Funktion wird eine int-Funktion syntaktisch aufgerufen, indem der Funktionsname gefolgt von einem Klammerpaar angegeben wird
Beim Aufruf einer int-Funktion wird in den Funktionskörper verzweigt und die dortigen Anweisungen ausgeführt
Als Wert wird in diesem Fall der Wert des arithmetischen Ausdrucks genommen, den die Funktion berechnet und mit Hilfe einer return-Anweisung zurückgegeben hat
Neben den Datentypen boolean und int gibt es in Java und anderen Programmiersprachen weitere Datentypen, auf deren Einführung im Hamstermodell zunächst verzichtet wird, für die der funktionale Begriff entsprechend gilt
Grundsätzlich können Funktionen wie Prozeduren auch in Form von Statements aufgerufen werden
Der zurückgegebene Funktionswert wird dann einfach ignoriert
Ab sofort werden Prozeduren als Sonderform von Funktionen behandelt
Sie geben keinen Wert zurück, was durch das Schlüsselwort void in ihrer Definition angezeigt wird
Funktionen sind während eines Programms gültig
Insbesondere können Funktionen auch aufgerufen werden, bevor sie definiert sind
Wenn sich nach Ausführung einer Funktion der Programmzustand geändert hat (z
B
die Position oder Blickrichtung des Hamsters), spricht man von einem Nebeneffekt, den die Funktion hervorgebracht hat.
Der Hamster bekommt die Aufgabe, so viele Körner abzulegen, wie es auf seinen vier Nachbarfeldern gibt (natürlich nur, wenn er genug Körner im Maul hat)
Er verwendet eine Funktion koernerVorne, die die Anzahl der Körner auf dem Feld vor dem Hamster ohne Seiteneffekte zurückgibt
// gibt die Anzahl der Körner auf dem Feld vor dem zurück
// Hamster befindet sich; erzeugt keine Nebenwirkungen
int koernerVorne() { // Definition einer int-Funktion
if (!frontFree()) {
Rückgabe 0;
}
vor();
int-Zähler = 0; // lokale Variable
während (kornDa()) {
nehmen();
Zahl = Zahl + 1;
}
// Um Nebenwirkungen zu vermeiden, müssen die Körner jetzt
// wieder hingelegt werden und der Hamster muss aufstehen
// seine alte Kachel zurückgeben
int zurück = Zahl ;
während (zurück > 0) {
geben Sie();
zurück = zurück – 1;
}
kehrt zurück();
vor();
kehrt zurück();
// Jetzt kann die Anzahl der Körner zurückgegeben werden
Rückgabenummer;
}
void gibt zurück () {
leftTog();
leftTog();
}
void main() {
// Erhalte die Anzahl der Körner davor
int benachbarte Körner = Körner davor (); // Aufruf einer int-Funktion
int Umdrehungen = 0;
// rotiert in die anderen Richtungen und fügt die hinzu
// entsprechende Anzahl Körner
während (dreht sich < 3) {
leftTom();
benachbarte Körner = benachbarte Körner +
KörnerBefore (); // Aufruf einer int-Funktion
Umdrehungen = Umdrehungen + 1;
}
// legt so viele Körner ab, wie er noch hat
// was in seinem Mund hat
while (neighborKoerner > 0 && !maulEmpty()) {
geben Sie();
benachbarte Körner = benachbarte Körner – 1;
}
}
Das Parameterkonzept erhöht die Flexibilität von Abläufen und Funktionen
Parameter sind lokale Variablen von Funktionen, die initialisiert werden, indem beim Aufruf der Funktion ein entsprechender Initialisierungswert für die Variable an die Funktion übergeben wird
Parameter werden im Funktionskopf definiert
Zwischen den beiden runden Klammern wird eine sogenannte formale Parameterliste eingefügt
Die Parameterliste besteht aus null, einer oder mehreren durch Kommas getrennten Parameterdefinitionen
Eine Parameterdefinition hat eine ähnliche Form wie die Variablendefinition
Was fehlt, ist ein expliziter Initialisierungsausdruck
Tatsächlich ist ein Parameter auch eine gewöhnliche Variable
Es ist lokal für den Funktionskörper
Ihm können im Funktionskörper entsprechend seines Typs Werte zugewiesen werden und er kann bei der Bildung von typkonformen Ausdrücken innerhalb des Funktionskörpers verwendet werden
Die Parameter innerhalb der Funktionsdefinition werden auch Formalparameter oder Parametervariablen genannt
Der Funktionsaufruf wird um die Angabe einer aktuellen Parameterliste zwischen den runden Klammern erweitert
Die durch Kommas getrennten Elemente in dieser Liste werden als aktuelle Parameter bezeichnet
Das sind Ausdrücke
Hinsichtlich der Definition von Funktionen mit (formalen) Parametern und dem Aufruf von Funktionen mit (aktuellen) Parametern sind folgende zusätzliche Bedingungen zu beachten:
Die Anzahl der Aktualparameter beim Aufruf einer Funktion muss gleich der Anzahl der Formalparameter in der Funktionsdefinition sein
(Ausnahme: sogenannte Varargs-Parameter)
Für alle Parameter in der angegebenen Reihenfolge muss gelten: Der Typ eines Aktualparameters muss dem Typ des entsprechenden Formalparameters entsprechen (boolesche Ausdrücke entsprechen dem Typ boolean , arithmetische Ausdrücke entsprechen dem Typ int ).
Wird eine Funktion mit Parametern aufgerufen, passiert folgendes: Die aktuellen Parameter – das sind Ausdrücke – werden berechnet, bei mehreren Parametern immer von links nach rechts
Für jeden formalen Parameter in der formalen Parameterliste wird im Funktionsrumpf eine lokale Variable angelegt
Diese Variablen werden dann unter Berücksichtigung der Reihenfolge innerhalb der Parameterlisten mit dem Wert des entsprechenden aktuellen Parameters initialisiert
Man spricht in diesem Zusammenhang auch von Parameterübergabe: Beim Aufruf einer Funktion wird der Wert eines aktuellen Parameters als Initialisierungswert an einen Formalparameter der Funktion übergeben
Eigentlich müssen Funktionsnamen in einem Programm eindeutig sein
Zwei oder mehr Funktionen können jedoch den gleichen Namen haben, wenn sich ihre formalen Parameterlisten in der Anzahl der Parameter oder den Typen der Parameter unterscheiden
Dieses Prinzip wird auch als Überladen von Funktionen bezeichnet
Die tatsächlich aufgerufene Funktion wird dann beim Aufruf der Funktion anhand der Nummer bzw
Typen der aktuellen Parameterliste ermittelt
Im folgenden Beispielprogramm wird eine Funktion mit einer formalen Parameternummer vom Typ int definiert
Die Funktion überlädt die Funktion, die den Hamster-Befehl zuvor darstellt
Der Zahlenwert gibt an, wie viele Kacheln der Hamster vorwärts springen soll
Der Wert muss erst zur Laufzeit beim Aufruf der Funktion angegeben werden
In der Hauptfunktion wird die Funktion einmal mit dem Wert 4 aufgerufen, d.h
der Hamster soll vier Kacheln vorwärts springen
Beim zweiten Aufruf wird als Wert die Anzahl der Körner im Hamstermaul übergeben
Entsprechend oft springt der Hamster nach vorne.
// der Hamster springt einige Male nach vorne, aber höchstens bis zur Wand
void before(int number) { // formaler Parameter
while (frontFree() && count > 0) {
vor();
Zahl = Zahl – 1;
}
}
// gibt die Anzahl der Körner im Mund des Hamsters ohne Nebenwirkungen zurück
int koernerImMaul() {
int Zahl = 0;
while (!maulEmpty()) {
geben Sie();
Zahl = Zahl + 1;
}
int Ergebnis = Zahl;
// Iss wieder Körner
während (Zählung > 0) {
nehmen();
Zahl = Zahl – 1;
}
Ergebnis zurückgeben ;
}
void main() {
vor(4); // aktueller Parameter
leftTog();
vorher(koernerImMaul()); // aktueller Parameter
}
Funktionen, die sich selbst aufrufen, heißen rekursive Funktionen
Die rekursive Funktion thereAndBack im folgenden Programm bewirkt, dass der Hamster zur nächsten Wand rennt und dann zurück zum Ausgangspunkt
void thereAndBack() {
if (frontFree()) {
vor();
Hin-und Rückfahrt(); // rekursiver Funktionsaufruf
vor();
} anders {
kehrt zurück();
}
}
void gibt zurück () {
leftTog();
leftTog();
}
void main() {
// Der Hamster rennt zur nächsten Wand und zurück
Hin-und Rückfahrt();
}
Nachdem Sie den Hamstersimulator gestartet haben, öffnet sich ein Fenster, das in etwa dem in Abbildung 5.1 gezeigten Fenster entspricht
Es enthält oben eine Menüleiste mit 5 Menüs, darunter eine Symbolleiste mit einer Reihe von Schaltflächen und unten einen Meldungsbereich, in dem Meldungen ausgegeben werden
Links befindet sich der Editorbereich, rechts der Simulationsbereich
Geben Sie Hamsterprogramme im Editorbereich ein und führen Sie Hamsterprogramme im Simulationsbereich aus
Abb
5.1: Hamstersimulator nach dem Öffnen
Um den Hamster etwas besser kennenzulernen, empfehle ich Ihnen, die Hamsterbefehle zuerst auszuprobieren
Abschnitt 5.1 erklärt, wie das geht
Die folgenden Abschnitte beschreiben dann ausführlich, was Sie tun müssen, um Ihr erstes Hamsterprogramm zu schreiben und auszuführen
Insgesamt fünf Stationen müssen/können durchlaufen werden: Anlegen eines Hamsterreviers
Eintritt in ein Hamsterprogramm
Erstellen eines Hamsterprogramms
Hamsterprogramm betreiben
Debuggen eines Hamsterprogramms
Klicken Sie im Menü “Fenster” auf den Menüpunkt “Befehlsfenster”
Ein Fenster mit dem Titel “Befehlsfenster” wird geöffnet
Alle dem Hamster bekannten Befehle erscheinen in diesem Fenster
Abb
5.2: Kommandofenster
Sie können die jeweiligen Befehle ausführen, indem Sie den Mauszeiger auf die entsprechende Schaltfläche bewegen und darauf klicken
Klickt man beispielsweise auf den „void forward()“-Button, springt der Hamster in seiner aktuellen Blickrichtung eine Kachel vorwärts (oder es erscheint eine Fehlermeldung, wenn der Hamster vor einer Wand steht)
Wenn Sie Programme mit Prozeduren oder Funktionen erfolgreich geschrieben und kompiliert haben, werden die Prozeduren und Funktionen auch im Befehlsfenster angezeigt und können interaktiv ausgeführt werden
Im Simulationsbereich werden keine Zwischenzustände ausgegeben, sondern immer der jeweilige Endzustand nach Abarbeitung der Funktion
Nun wollen wir ein Hamsterrevier einrichten, in dem unser erstes Programm laufen soll
Dies geschieht im Simulationsbereich
Hier wird das Hamsterrevier gezeigt
Um das Gebiet zu gestalten, müssen Sie die Schaltflächen 12 – 17 (von links) in der sogenannten Symbolleiste verwenden
Diese werden auch als Design-Buttons bezeichnet
Bewegen Sie einfach die Maus über die einzelnen Schaltflächen der Symbolleiste und es erscheint ein Tooltip, der beschreibt, wofür diese Schaltfläche verwendet wird
Zuerst werden wir die Größe des Territoriums anpassen
Klicken Sie dazu auf die Schaltfläche „Gebietsgröße ändern“ (12
Schaltfläche von links)
Es erscheint ein Dialogfenster, in dem Sie die gewünschte Anzahl an Zeilen und Spalten eingeben können
Um die dort erscheinenden Werte (jeweils 10) ändern zu können, klicken Sie mit der Maus auf das entsprechende Eingabefeld
Anschließend können Sie den Wert über die Tastatur eingeben
Nach Eingabe der Werte klicken Sie bitte auf die Schaltfläche OK
Das Dialogfeld wird geschlossen und das Gebiet wird in der angegebenen Größe angezeigt
Jetzt werden wir den Hamster umsiedeln, der immer im Revier sitzt
Dazu klicken wir auf den Hamster und ziehen (auch „ziehen“ genannt) ihn mit gedrückter Maustaste auf die gewünschte Kachel
Dann lassen wir die Maustaste los
Standardmäßig schaut der Hamster nach Osten
Sie können jedoch mit der Schaltfläche “nach links drehen” (13
Schaltfläche von links) die Blickrichtung ändern
Jedes Mal, wenn Sie auf die Schaltfläche klicken, dreht sie sich um 90 Grad nach links
Normalerweise hat der Hamster 0 Körner im Maul
Dies kann mit Hilfe des Buttons „Körner in den Mund stecken“ (14
Button von links) geändert werden
Wenn Sie auf die Schaltfläche klicken, wird ein Dialogfeld angezeigt
Sie sehen eine Zahl, die die aktuelle Anzahl der Körner im Maul des Hamsters anzeigt
Wenn Sie diese Nummer ändern möchten, geben Sie einfach die gewünschte Nummer über die Tastatur ein und klicken Sie dann auf die Schaltfläche OK im Dialogfeld
Das Dialogfenster schließt sich dann automatisch
Nun wollen wir Körner auf einige Kacheln legen
Dies geschieht über die Schaltfläche „Korn einstellen“ (15
Schaltfläche von links)
Wenn Sie mit der Maus darauf klicken, erscheint am Mauszeiger ein Kornsymbol
Bewegen Sie nun die Maus über das Plättchen, auf das ein Samen gelegt werden soll, und klicken Sie dort mit der Maus
Auf der Kachel erscheint nun ein Getreidesymbol
Befinden sich bereits ein oder mehrere Körner auf dem Plättchen, wird deren Anzahl um eins erhöht
Aber Achtung: Es werden maximal 12 Körner angezeigt, auch wenn mehr als 12 Körner auf dem Plättchen liegen!
Wenn Sie die Umschalttaste auf Ihrer Tastatur gedrückt halten und dann auf die Schaltfläche „Korn platzieren“ in der Symbolleiste klicken, haben Sie die Möglichkeit, mehrere Körner im Gebiet zu platzieren, ohne jedes Mal erneut auf die Schaltfläche klicken zu müssen
Solange Sie die Umschalttaste gedrückt halten und auf eine Kachel klicken, wird dort eine Körnung hinzugefügt.
Wände werden auf körnchenähnlichen Fliesen platziert
Verwenden Sie dazu die Schaltfläche „Wand setzen“ (16
Schaltfläche von links)
Wände können natürlich nicht auf Kacheln gelegt werden, auf denen bereits eine Wand besteht oder auf denen sich der Hamster befindet
Wenn eine Wand auf eine Kachel mit Körnern gelegt wird, werden diese gelöscht
Wenn Sie bestimmte Kacheln im Territorium wieder leeren möchten, damit weder eine Mauer noch Körner darauf platziert werden, aktivieren Sie die Schaltfläche „Kachel löschen“ (17
Schaltfläche von links)
Klicken Sie dann auf die Kacheln, die geleert werden sollen
Der Button bleibt so lange aktiviert, bis er erneut geklickt oder ein anderer Design-Button gedrückt wird.
Genau wie der Hamster können auch Mauern und Körner durch Klicken und Bewegen der Maus bei gedrückter linker Maustaste im Revier neu positioniert werden
Über die „Bühne“ Menü können Sie Territorien auch in einer Datei speichern und später wieder laden
Nun wissen Sie also eigentlich alles, was nötig ist, um das Hamsterrevier nach Ihren Wünschen zu gestalten
Erstellen Sie als Nächstes, bevor Sie weiterlesen, das in Abbildung 5.3 skizzierte Gebiet
Abbildung 5.3: Beispielgebiet
Nachdem wir im Simulationsbereich unser erstes Hamsterrevier gestaltet haben, gehen wir nun in den Editorbereich
Dort werden wir unser erstes Hamsterprogramm schreiben
Unser erstes Programm sollte den Hamster veranlassen, zwei Körner in dem Gebiet zu fressen, das wir gerade entworfen haben
Wir klicken in den Editorbereich und geben wie in einem normalen Editor oder Textverarbeitungsprogramm wie Microsoft Word die entsprechenden Hamster-Befehle ein, so dass letztendlich im Eingabebereich steht:
void main() {
vor();
vor();
nehmen();
rightToggle();
vor();
vor();
nehmen();
}
void rightToggle() {
leftTog();
leftTog();
leftTog();
}
Dies ist unser erstes Hamsterprogramm
Funktionen, die Sie sicher aus anderen Editoren oder Textverarbeitungsprogrammen kennen, wie „Ausschneiden“, „Kopieren“, „Einfügen“, „Rückgängig“ und „Wiederherstellen“, erreichen Sie über das Menü „Programm“ bzw
„Wiederherstellen“
betätigen Sie die entsprechenden Schaltflächen in der Symbolleiste (vierte bis achte Schaltfläche von links)
Außerdem gibt es im Menü „Programm“ zwei Menüpunkte zum Speichern von Programmen in Dateien und zum erneuten Laden gespeicherter Programme
Wenn Sie es aktivieren, erscheint ein Dateiauswahldialog, in dem Sie die entsprechende Auswahl der jeweiligen Datei treffen müssen
Achtung: Wenn Sie eine gespeicherte Datei laden, geht der aktuell im Editorbereich befindliche Programmtext verloren (sofern er nicht zuvor in einer Datei gespeichert wurde)
Im Menü „Programm“ finden Sie außerdem weitere nützliche Funktionen (Schriftgröße ändern, Drucken,. ..)
Nachdem wir unser Hamsterprogramm geschrieben haben, müssen wir es kompilieren
Der Compiler prüft den Quellcode auf syntaktische Korrektheit und wandelt ihn – wenn er korrekt ist – in ein ausführbares Programm um
Zum Kompilieren drücken Sie einfach die Schaltfläche „Compile“ (erste Toolbar-Schaltfläche von links oder Menüpunkt „Compile“ im Menü „Program“)
Anschließend wird das aktuell im Eingabebereich sichtbare Programm kompiliert
Es wird zuvor automatisch in einer (temporären) Datei (namens Solist.java) gespeichert
Wenn das Programm korrekt ist, erscheint ein Dialogfeld mit der Meldung „Kompilierung erfolgreich“
Anschließend müssen Sie mit der OK-Taste bestätigen
Das Programm kann nun ausgeführt werden
Bitte denken Sie daran: Immer wenn Sie Änderungen am Quellcode Ihres Programms vorgenommen haben, müssen Sie es zunächst neu kompilieren.
Wenn das Programm syntaktische Fehler enthält – zum Beispiel, wenn Sie sich bei der Eingabe des obigen Programms vertippt haben – werden die Fehlermeldungen des Compilers unterhalb des Editorbereichs angezeigt
Diese erscheinen auf Englisch
Außerdem wird die Zeile angegeben, in der der Fehler entdeckt wurde
Wenn Sie mit der Maus auf die Fehlermeldung klicken, springt der Mauszeiger automatisch auf die angegebene Zeile im Editorbereich (siehe Abbildung 5.4)
Abbildung 5.4: Fehlermeldungen des Compilers
Achtung: Die Fehlermeldungen und die Zeilenangabe eines Compilers sind nicht immer wirklich exakt
Das Interpretieren der Meldungen ist für Programmieranfänger oft nicht einfach und erfordert etwas Erfahrung
Machen Sie daher am Anfang absichtlich Fehler und versuchen Sie, die Meldungen des Compilers zu verstehen
Tipp: Arbeiten Sie die Fehler, die der Compiler entdeckt hat, immer von oben nach unten ab
Wenn Sie dann eine Nachricht überhaupt nicht verstehen, können Sie gerne noch einmal kompilieren
Häufig kommt es (leider) vor, dass der Compiler für einen einzelnen Fehler mehrere Fehlermeldungen ausgibt, was Anfänger leicht verwirren kann
Nachdem Sie die Fehler behoben haben, müssen Sie das Programm erneut kompilieren
Wiederholen Sie dies, bis der Compiler „Kompilierung erfolgreich“ meldet
Erst dann können Sie das Programm ausführen!
Nach erfolgreichem Kompilieren ist es nun endlich soweit: Wir können dem Hamster bei der Arbeit zusehen
Tut er wirklich das, was wir ihm durch unser Programm beigebracht haben? Die Schaltflächen rechts in der Symbolleiste dienen zur Steuerung des Programmablaufs
Durch Klick auf den Button „Simulation starten“ (18
Button von links) starten wir das Programm
Wenn Sie bis hierher alles richtig gemacht haben, sollte der Hamster losrennen und zwei Körner sammeln, wie im Programm beschrieben
Herzlichen Glückwunsch zu Ihrem ersten Hamsterprogramm!
Wenn Sie die Programmausführung anhalten möchten, können Sie dies tun, indem Sie auf die Schaltfläche “Simulation anhalten” (20
Schaltfläche von links) klicken
Der Hamster pausiert, bis Sie erneut auf die Schaltfläche „Simulation starten/fortsetzen“ (18
Schaltfläche von links) klicken
Dann geht der Hamster weiter mit seiner Arbeit
Über die Schaltfläche „Simulation beenden“ (21
Schaltfläche von links) können Sie das Programm vorzeitig komplett abbrechen
Wenn Sie ein Programm mehrmals hintereinander im selben Gebiet ausführen möchten, können Sie die Schaltfläche “Zurücksetzen” (19
Schaltfläche von links) verwenden
Schaltfläche von links) den Zustand des Gebiets wiederherstellen, das vor der letzten Ausführung des Programms bestanden hat
Ein komplettes Zurücksetzen des Reviers auf den Zustand beim Öffnen des Hamstersimulators ist mit der Schaltfläche „Komplett zurücksetzen“ (23
Schaltfläche von links) möglich
Mit dem Schieberegler ganz rechts in der Menüleiste wird die Geschwindigkeit der Programmausführung gesteuert
Je weiter Sie den Knopf nach links bewegen, desto langsamer verrichtet der Hamster seine Arbeit
Je weiter Sie ihn nach rechts bewegen, desto schneller saust der Hamster durchs Revier
Die Steuerelemente zur Steuerung der Programmausführung finden Sie auch im Menü „Simulation“
kann: zusätzliche Steuerungsmöglichkeiten haben und kann in bestimmten Situationen den Status des Programms (welche Zeile des Quellcodes gerade ausgeführt wird, welche Werte die Variablen aktuell haben) anzeigen
Dies ist nützlich, wenn Ihr Programm nicht das tut, was es soll, und Sie herausfinden möchten, was falsch ist.
Klicken Sie zum Debuggen zunächst auf die Schaltfläche „Tracing aktivieren“ in der Symbolleiste (24
Schaltfläche von links)
Es öffnet sich das sogenannte Debugger-Fenster mit dem Titel „Debugger“
Der Prozedur-Stack wird im linken Bereich des Debugger-Fensters angezeigt
Dies ist die aktuelle Prozedur und die Prozeduren, aus denen die Prozedur aufgerufen wurde
Im rechten Bereich werden die gültigen Variablen und deren aktuelle Werte angezeigt (sofern vorhanden) (siehe Abb
5.5)
Abb
5.5: Debugger-Fenster
Nun können Sie über den „Step“-Button (19
Toolbar-Button von links) jeden Befehl einzeln ausführen und es erscheint ein blauer Balken im Editorbereich, welcher Befehl oder Zeile als nächstes ausgeführt wird
Beim Aufruf einer Prozedur wird automatisch in die entsprechende Prozedur verzweigt
Im Debugger-Fenster wird auch der Prozedur-Stack angezeigt, also die aktuelle Prozedur und die Prozeduren, aus denen die Prozedur aufgerufen wurde
Sie können das Programm auch einfach starten und überwachen, indem Sie auf die Schaltfläche “Start” klicken
Wenn Sie dann die Schaltfläche „Pause“ drücken, haben Sie auch die Möglichkeit, von der aktuellen Position aus schrittweise fortzufahren
Das Tracing kann übrigens jederzeit durch erneutes Anklicken des Buttons „Tracing“ deaktiviert bzw
wieder aktiviert werden
Wenn Sie möchten, können Sie vor oder während des Programmlaufs einen Haltepunkt in der entsprechenden Zeile setzen, damit der Programmablauf automatisch angehalten wird, wenn eine bestimmte Zeile erreicht wird
Doppelklicken Sie dazu im Editorbereich auf die entsprechende Zeilennummer
Haltepunkte werden durch die violett hervorgehobene Zeilennummer gekennzeichnet
Ein Breakpoint oder alle Breakpoints können durch erneuten Doppelklick oder über ein aktivierbares Popup-Menü oberhalb der Zeilennummern wieder gelöscht werden
Breakpoints werden oft verwendet, um ein Programm bis zu einem bestimmten Punkt normal laufen zu lassen und von dort aus die Möglichkeit der zeilenweisen Ausführung zu nutzen
Herzlichen Glückwunsch! Wenn Sie so weit gekommen sind, haben Sie Ihr erstes Hamsterprogramm erstellt und ausgeführt
Wie Sie sehen, ist die Bedienung des Hamstersimulators gar nicht so kompliziert
Der Hamstersimulator bietet jedoch noch mehr Möglichkeiten
Dies können Sie nun selbst durch einfaches Ausprobieren erkunden oder im nächsten Abschnitt ausführlich nachlesen
Im letzten Abschnitt haben Sie eine kurze Einführung in die Funktionsweise des Hamstersimulators erhalten
In diesem Abschnitt werden die einzelnen Funktionen des Simulators ausführlich vorgestellt
Natürlich wird sich einiges wiederholen
Wenn Sie den Hamster-Simulator starten, öffnet sich ein Fenster mit dem Titel „Hamster-Simulator Light“
Abbildung 6.1 skizziert die einzelnen Komponenten des Fensters
Abb
6.1: Bestandteile des Simulatorfensters
Die Menüleiste am oberen Rand des Fensters enthält 5 Menüs
Darunter befindet sich eine Symbolleiste mit Schaltflächen, mit denen die wichtigsten Menüfunktionen per Klick auf eine Schaltfläche schneller ausgeführt werden können
Wichtige Nachrichten werden unten im Nachrichtenbereich angezeigt
Hamsterprogramme werden im linken Editorbereich eingegeben und die Ausführung von Hamsterprogrammen im Simulationsbereich (auch „Stage“ genannt) visualisiert
Die Hauptfunktionsbereiche des Hamstersimulators lassen sich identifizieren: Verwaltung und Bearbeitung von Hamsterprogrammen
Kompilieren von Hamsterprogrammen
Verwalten und gestalten Sie Hamstergebiete
Interaktive Ausführung von Hamsterbefehlen
Hamsterprogramme laufen
Hamsterprogramme debuggen
Bevor der Simulator anhand dieser Funktionsbereiche im Detail vorgestellt wird, werden zunächst einige Grundfunktionen grafischer Benutzeroberflächen erläutert.
In diesem Unterabschnitt werden einige wichtige Grundfunktionalitäten grafischer Benutzeroberflächen beschrieben
Dieser Abschnitt richtet sich an diejenigen unter Ihnen, die neu im Umgang mit Computern sind
Diejenigen von Ihnen, die schon lange einen Computer haben und ihn regelmäßig benutzen, können diesen Abschnitt getrost überspringen
Wenn wir im Folgenden von „Klicken auf ein Objekt“ oder „Klicken auf ein Objekt mit der Maus“ sprechen, bedeutet dies, dass Sie den Mauszeiger auf dem Bildschirm platzieren, indem Sie die Maus auf dem Tisch über das Objekt bewegen und dann Drücken der – in der Regel linken – Maustaste
Tooltips sind kleine Rechtecke, die automatisch auf dem Bildschirm erscheinen, wenn Sie mit dem Mauszeiger über entsprechende Objekte platziert werden (siehe Abbildung 6.2)
In den Tooltipps werden bestimmte Informationen ausgegeben
Abb
6.2: Tooltip
Schaltflächen sind Objekte der Benutzeroberfläche, auf die Sie klicken können und die dann eine bestimmte Aktion auslösen (siehe Abbildung 6.3)
Schaltflächen haben eine textuelle Beschreibung (z
B
„OK“) oder eine Grafik, die etwas über die Aktion aussagt
Schaltflächen erkennen Sie an ihrer leicht hervorgehobenen Darstellung
Grafischen Schaltflächen sind in der Regel Tooltips zugeordnet, die die zugeordnete Aktion beschreiben
Abb
6.3: Schaltflächen
Menüs befinden sich am oberen Rand eines Fensters in der sogenannten Menüleiste (siehe Abbildung 6.4)
Sie werden durch einen Text (Programm, Bühne, Simulation,. ..) beschrieben
Wenn Sie auf den Text klicken, öffnet sich eine Box mit sogenannten Menüpunkten
Diese wiederum bestehen aus Texten, die Sie anklicken können
Ähnlich wie Schaltflächen löst das Klicken auf Menüpunkte Aktionen aus, die im Allgemeinen durch den Text beschrieben werden (Speichern, Kopieren,. ..)
Nach Klick auf einen Menüpunkt wird die Aktion gestartet und die Box schließt sich automatisch wieder
Wenn Sie im Fenster irgendwo außerhalb der Box klicken, schließt sich die Box ebenfalls und es wird keine Aktion ausgelöst
Abb
6.4: Menüleiste und Menü
Oft steht hinter den Menüpunkten zusätzlicher Text, wie „Strg-O“ oder „Alt-N“
Diese Texte zeigen Tastenkombinationen an
Das Drücken der entsprechenden Tasten auf der Tastatur löst dieselbe Aktion aus wie das Klicken auf den Menüpunkt
Manchmal erscheinen bestimmte Menüpunkte etwas heller
Sie sollen auch ausgegraut sein
In diesem Fall kann der Menüpunkt nicht angeklickt und die zugeordnete Aktion nicht ausgelöst werden
Das Programm befindet sich in einem Zustand, in dem die Aktion keinen Sinn machen würde
Direkt unterhalb der Menüleiste befindet sich die sogenannte Toolbar (siehe Abbildung 6.5)
Es besteht aus einer Reihe grafischer Schaltflächen, die Alternativen zu den am häufigsten verwendeten Menüpunkten in den Menüs darstellen
Abb
6.5: Symbolleiste
Pop-up-Menüs sind spezielle Menüs, die bestimmten Elementen auf dem Bildschirm zugeordnet sind (siehe Abbildung 6.6)
Sie öffnen es, indem Sie den Mauszeiger auf das entsprechende Element bewegen und dann die rechte Maustaste drücken
Wie bei normalen Menüs erscheint dann eine Box mit Menüpunkten
Abb
6.6: Popup-Menü
Eingabefelder dienen zur Eingabe von Zeichen (siehe Abbildung 6.7)
Positionieren Sie dazu den Mauszeiger auf das Eingabefeld und klicken Sie mit der Maus
Anschließend können Sie die im Eingabefeld erscheinenden Zeichen über die Tastatur eingeben.
Beim Auslösen bestimmter Aktionen erscheinen sogenannte Dialogboxen auf dem Bildschirm (siehe Abbildung 6.7)
Sie enthalten in der Regel viele grafische Objekte, wie Textinformationen, Eingabefelder und Schaltflächen
Wenn ein Dialogfeld auf dem Bildschirm erscheint, werden alle anderen Fenster im Programm für Texteingaben oder Mausklicks gesperrt
Um eine Dialogbox zu schließen, d
h
die Dialogbox vom Bildschirm verschwinden zu lassen, gibt es normalerweise eine Reihe von Schaltflächen, die am unteren Rand der Dialogbox angeordnet sind
Das Klicken auf eine “OK-Schaltfläche” löst die dem Dialogfeld zugewiesene Aktion aus
Durch Klicken auf die Schaltfläche “Abbrechen” wird ein Dialogfeld geschlossen, ohne dass Aktionen ausgelöst werden
Abb
6.7: Dialogfenster mit Eingabefeldern
Dateiauswahldialoge sind spezielle Dialoge zum Speichern und Öffnen von Dateien (siehe Abbildung 6.8)
Sie spiegeln im Prinzip das Dateisystem wider und enthalten Funktionalitäten zur Verwaltung von Dateien und Ordnern
Abb
6.8: Dialog zur Dateiauswahl
Alle Dateien und Unterordner des aktuellen Ordners erscheinen im mittleren Bereich eines Dateiauswahldialogs
Sie werden durch verschiedene Symbole dargestellt
Der eigentliche Zweck von Dateiauswahldialogen ist – wie der Name schon sagt – die Auswahl einer Datei
Wenn Sie auf eine Datei klicken, erscheint der Name automatisch im Eingabefeld „Dateiname“
Dort können Sie auch über die Tastatur einen Dateinamen eingeben
Anschließend wird nach Drücken der OK-Taste die entsprechende Datei geöffnet bzw
gespeichert
Dateiauswahldialoge bieten jedoch zusätzliche Funktionalitäten
Durch einen Doppelklick auf einen Ordner können Sie in den entsprechenden Ordner wechseln
Im mittleren Bereich werden dann die Dateien und Unterordner dieses Ordners angezeigt
Um zu einem übergeordneten Ordner zurückzukehren, verwenden Sie das Menü „Suchen in“, in dem Sie den entsprechenden Ordner auswählen können
Neben dem Menü „Suchen in“ sind fünf grafische Schaltflächen angeordnet
Durch Klicken auf die linke Schaltfläche gelangen Sie im Ordnerbaum eine Ebene nach oben
Durch Klicken auf die zweite Schaltfläche von links gelangen Sie zur Wurzel des Ordnerbaums
Mit der mittleren Taste können Sie im aktuellen Ordner einen neuen Unterordner erstellen
Mit den beiden rechten Tasten können Sie die Anzeige im mittleren Bereich verändern
Wenn Sie einen Ordner oder eine Datei umbenennen möchten, müssen Sie im mittleren Bereich des Dateiauswahldialogs zweimal auf den Namen des Ordners oder der Datei klicken – mit einer Pause dazwischen
Die textuelle Darstellung des Namens wird dann zu einem Eingabefeld, in dem der Name über die Tastatur geändert werden kann
Ein Elementbaum stellt Elemente und strukturelle Beziehungen zwischen ihnen dar, z
die Ordner und Dateien des Dateisystems (siehe Abbildung 6.9)
Abb
6.9: Elementbaum mit Verzeichnissen und Dateien
Unterschiedliche Elementtypen werden durch unterschiedliche Symbole dargestellt, hinter denen entsprechende Bezeichnungen erscheinen
Durch Klicken auf die Symbole links können Strukturen geöffnet und geschlossen werden, d
h
Unterstrukturen sichtbar oder unsichtbar machen
Popup-Menüs sind Ordnern und Dateien zugeordnet
Um diese zu öffnen, müssen Sie zunächst mit der Maus auf den Ordner oder die Datei klicken
Der Name wird dann durch einen blauen Balken hervorgehoben
Dann müssen Sie die rechte Maustaste drücken
Dann öffnet sich das Popup-Menü
Die Popup-Menüs enthalten beispielsweise Menüpunkte zum Löschen und Umbenennen des entsprechenden Ordners oder der Datei.
Eine geteilte Scheibe ist ein Element, das aus zwei Scheiben und einem Träger besteht
(siehe Abbildung 6.10)
Die beiden Bereiche können sich links und rechts oder oberhalb und unterhalb der Leiste befinden
Wenn Sie mit der Maus auf den Balken klicken und ihn bei gedrückter Maustaste nach links oder rechts (bzw
oben oder unten) verschieben, vergrößert sich einer der beiden Bereiche, der andere verkleinert sich
Sie können einen der beiden Bereiche auch ganz verschwinden lassen, indem Sie auf einen der beiden Pfeile auf der Leiste klicken
6.10: Geteiltes Fenster
Das Schreiben von Programmen oder genauer gesagt das Schreiben des Quellcodes von Programmen wird als Editieren bezeichnet
Im Hamstersimulator dient der Editorbereich zum Bearbeiten von Hamsterprogrammen (siehe Abbildung 6.11)
Abb
6.11: Editorbereich des Hamstersimulators
Im Editorbereich können Sie Programme eingeben
Das Menü „Programm“ ist wichtig für die Verwaltung und Bearbeitung von Programmen
Unterhalb der Menüleiste ist eine spezielle Symbolleiste zu sehen, mit der Sie die wichtigsten Menüfunktionen schneller erreichen und ausführen können
Bewegen Sie einfach die Maus über die Schaltflächen
Anschließend erscheint ein Tooltip, der die Funktionalität der Schaltfläche zeigt
Die für Bearbeitungsprogramme wichtigen Schaltflächen der Symbolleiste sind in Abbildung 6.12 skizziert
Abbildung 6.12: Editor-Schaltflächen in der Symbolleiste
Das Schreiben eines neuen Hamsterprogramms ist durch Eintippen des Quellcodes im Editorbereich möglich
Wenn Sie Teile des aktuellen Hamsterprogramms ändern möchten, klicken Sie einfach auf die entsprechende Stelle im Editorbereich und fügen Sie die entsprechenden Wörter ein oder löschen Sie diese.
Sie können das aktuelle Hamsterprogramm im Editorbereich vollständig löschen, indem Sie den gesamten Quellcode auswählen mit der Maus und anschließendes Drücken der Schaltfläche „Ausschneiden“ (7
Schaltfläche von links) in der Symbolleiste
Alternativ können Sie auch auf die Schaltfläche „Neu“ in der Symbolleiste (1
Schaltfläche von links) klicken
Achtung: Beim Löschen oder Neuanlegen geht der aktuelle Inhalt des Editorbereichs verloren! Möglicherweise müssen Sie es zuerst in einer Datei speichern
Normalerweise müssen Sie sich keine Gedanken über das Speichern des aktuellen Programms machen
Es wird vor dem Kompilieren automatisch in einer internen Datei gespeichert
Wenn Sie jedoch ein Programm explizit speichern möchten, können Sie in der Symbolleiste auf die Schaltfläche “Speichern” (3
Schaltfläche von links) klicken
Es öffnet sich ein Dateiauswahldialog, mit dem Sie die gewünschte Datei auswählen können
Wenn Sie ein gespeichertes Hamster-Programm wieder in den Editorbereich laden möchten, können Sie dies über den „Laden“-Button in der Symbolleiste (2
Button von links) tun
Nach Anklicken der Schaltfläche erscheint ein Dateiauswahldialog, über den Sie die gewünschte Datei auswählen können
Achtung: Beim Laden einer gespeicherten Datei geht der aktuelle Inhalt des Editorbereichs verloren! Möglicherweise müssen Sie es zuerst in einer Datei speichern
Über die Schaltfläche „Drucken“ (6
Symbolleistenschaltfläche von links) können Sie das aktuelle Programm im Editorbereich ausdrucken
Es öffnet sich ein Dialogfenster, in dem Sie die entsprechenden Druckeinstellungen vornehmen und den Druck starten können
Im Editorbereich können Sie – wie bei anderen Editoren auch – Zeichen über die Tastatur eingeben oder löschen
Darüber hinaus stellt der Editor einige weitere Funktionalitäten zur Verfügung, die über das Menü „Programm“ oder die entsprechenden Editor-Schaltflächen in der Symbolleiste aktiviert werden können
Schaltfläche “Ausschneiden” (7
Symbolleistenschaltfläche von links): Hiermit können Sie komplette Passagen des Editorbereichs in einem Schritt löschen
Markieren Sie die zu löschende Passage mit der Maus und klicken Sie anschließend auf die Schaltfläche
Der markierte Text verschwindet.
Schaltfläche “Kopieren” (8
Symbolleistenschaltfläche von links): Hiermit können Sie komplette Passagen des Editorbereichs in einen temporären Zwischenspeicher kopieren
Markieren Sie die zu kopierende Passage mit der Maus und klicken Sie dann auf die Schaltfläche
Schaltfläche “Einfügen” (9
Symbolleistenschaltfläche von links): Hiermit fügen Sie den Inhalt des Zwischenpuffers an der aktuellen Cursorposition ein
Wählen Sie zunächst die entsprechende Position aus und klicken Sie dann auf die Schaltfläche
Der Text des Zwischenpuffers wird eingefügt
Schaltfläche „Rückgängig“ (10
Symbolleistenschaltfläche von links): Wenn Sie Änderungen am Quellcode – aus welchen Gründen auch immer – rückgängig machen möchten, können Sie dies durch Klicken auf die Schaltfläche tun
Schaltfläche “Wiederherstellen” (11
Symbolleistenschaltfläche von links): Mit dieser Schaltfläche können Sie rückgängig gemachte Änderungen wiederherstellen
Mit der Kopierfunktion des Betriebssystems ist sogar das Kopieren und Einfügen von Text aus anderen Programmen (z
B
Microsoft Word) möglich
Die eben aufgeführten Funktionen finden Sie auch im Menü „Programm“
Dort werden weitere Funktionalitäten angeboten: Einrücken: Ein Klick auf den Menüpunkt aktiviert bzw
deaktiviert den Einrückmodus
Ist der Einrückungsmodus aktiviert, wird beim Eingeben von Text im Editorbereich automatisch in die entsprechende Spalte eingerückt, wenn Sie die Eingabetaste drücken
Schriftgröße: Hier können Sie die Schriftgröße des Editorbereichs anpassen
Beim Kompilieren von Programmen – genauer gesagt der Quellcode – auf ihre (syntaktische) Korrektheit geprüft und bei Erfolg lauffähige Programme erstellt
Die Schaltfläche „Compile“ (4
Schaltfläche in der Symbolleiste von links) oder der Menüpunkt „Compile“ im Menü „Program“ (siehe Abbildung 6.13) dient im Hamster-Simulator zum Kompilieren von Programmen
An der Farbe der Compiler-Buttons erkennen Sie, ob gerade Compiliert werden muss oder nicht
Immer wenn Sie im Editorbereich Änderungen vorgenommen haben, färbt sich der Button rot und die Änderungen werden erst berücksichtigt, nachdem Sie (erneut) kompiliert haben
Erscheint die Schaltfläche in einer neutralen Farbe, ist keine Zusammenstellung notwendig
Wenn Sie auf die Schaltfläche “Compile” klicken, wird das Programm, das gerade im Editorbereich sichtbar ist, in einer internen Datei (mit dem Namen “Solist.java”) gespeichert und kompiliert
Wenn Ihr Programm syntaktisch korrekt ist, erscheint nach einigen Sekunden ein Dialogfenster mit einer entsprechenden Meldung
Ein (neues) ausführbares Programm wurde erstellt
Wenn Ihr Programm Fehler enthält, öffnet sich in einem Scroll-Fenster unterhalb des Editorbereichs ein neuer Bereich, der die Fehlermeldungen des Compilers anzeigt (siehe Abbildung 6.13)
Es wurde kein (neues) ausführbares Programm erstellt! Jede Fehlermeldung erscheint in einer eigenen Zeile
Jede Zeile enthält eine Beschreibung des (wahrscheinlichen) Fehlers und die entsprechende Zeile der Anweisung im Programm
Wenn Sie auf eine Fehlermeldung klicken, wird die entsprechende Anweisung im Eingabebereich blau hinterlegt und der Mauszeiger an der entsprechenden Stelle positioniert
Sie müssen nun jeden Fehler beheben und dann speichern und erneut kompilieren, bis Ihr Programm fehlerfrei ist
Der Fehlermeldungsbereich schließt sich dann automatisch wieder
Abb
6.13: Fehlermeldungen des Compilers
Achtung: Die Interpretation von Fehlermeldungen des Compilers ist nicht trivial
Die Berichte sind nicht immer besonders präzise und oft irreführend
Häufig gibt der Compiler mehrere Fehlermeldungen aus, obwohl es sich nur um einen einzelnen Fehler handelt
Beherzigen Sie daher vor allem zu Beginn folgende Hinweise: Arbeiten Sie die Fehlermeldungen immer von oben nach unten ab
Wenn der Compiler eine große Anzahl von Fehlermeldungen zurückgibt, beheben Sie zuerst nur eine Teilmenge und kompilieren Sie dann erneut
Wenn Sie ein Anfänger sind, machen Sie Fehler in Ihren Programmen und schauen Sie sich dann die Fehlermeldungen des Compilers an
Das Hamstergebiet besteht standardmäßig aus 10 Zeilen und 10 Spalten
Der Hamster steht auf der linken oberen Kachel, also der Kachel mit den Koordinaten (0/0)
Er hat 0 Körner im Mund und schaut nach Osten
In der Symbolleiste dienen die Schaltflächen 12 – 17 von links dazu, das Revier des Hamsters zu gestalten
Hamsterreviere können über das Menü „Stage“ verwaltet werden (siehe auch Abbildung 6.14)
Abbildung 6.14: Gebietsschaltflächen in der Symbolleiste
Normalerweise sollten Sie ein Gebiet anlegen, bevor Sie ein Programm ausführen
Es ist jedoch auch möglich, Änderungen während des Programmablaufs vorzunehmen
Durch Klicken auf die Schaltfläche “Größe ändern” (12
Symbolleistenschaltfläche von links) können Sie die Größe des Gebiets ändern
Es öffnet sich ein Dialogfenster mit zwei Eingabefeldern, in denen Sie die gewünschte Anzahl an Zeilen und Spalten eingeben können
Nach dem Drücken der Schaltfläche OK schließt sich das Dialogfeld und das Gebiet erscheint in der angegebenen Größe
Achtung: Wenn Sie das Territorium verkleinern, werden Mauern und Körner, die dann außerhalb des Territoriums liegen würden, gelöscht
Befindet sich der Hamster beim Herauszoomen auf einer Kachel außerhalb der neuen Reviergröße, wird er auf die Kachel (0/0) verschoben (eine eventuell vorhandene Mauer wird zuerst gelöscht)
Um den Hamster auf einem anderen Feld im Hamstergebiet zu platzieren, klicke es mit der Maus an und ziehe es bei gedrückter Maustaste auf das gewünschte Feld
Um die Blickrichtung des Hamsters zu ändern, klicken Sie bitte auf die Schaltfläche „Hamster drehen“ (13
Symbolleistenschaltfläche von links)
Jedes Mal, wenn Sie auf diese Schaltfläche klicken, dreht sich der Hamster um 90 Grad nach links
Um die Anzahl der Körner im Maul des Hamsters einzustellen, klicken Sie auf die Schaltfläche „Körner im Maul“ (14
Symbolleistenschaltfläche von links)
Es öffnet sich ein Dialogfenster mit einem Eingabefeld
In diesem Eingabefeld erscheint die aktuelle Anzahl der Körner im Hamstermaul
Sie können nun die gewünschte Nummer in das Eingabefeld eingeben
Klicken Sie anschließend auf die Schaltfläche OK, um Ihre Eingabe zu bestätigen
Die Dialogbox schließt sich und der Hamster hat die eingegebene Anzahl Körner im Maul
Um ein Getreide auf eine Kachel des Hamsterreviers zu legen, klicken Sie auf die Schaltfläche „Getreide platzieren“ in der Symbolleiste (15
Symbolleistenschaltfläche von links )
Klicken Sie dann auf die entsprechende Kachel
Das Getreide wird dort platziert (es sei denn, es gibt dort eine Wand)
Achtung: Auch wenn mehr als 12 Körner auf einer Kachel liegen, werden maximal 12 Körner auf einer Kachel angezeigt
Um nicht jedes Mal auf die Schaltfläche „Körnung festlegen“ klicken zu müssen, wenn Sie eine Körnung platzieren, können Sie auch Folgendes tun: Halten Sie die Umschalttaste auf der Tastatur gedrückt und klicken Sie bei gedrückter Umschalttaste auf die Schaltfläche „Körnung festlegen“
Solange Sie die Shift-Taste gedrückt halten, können Sie dort ein (weiteres) Korn platzieren, indem Sie auf eine Kachel des Hamsterreviers klicken
Getreide kann auch im Gebiet umgelagert werden
Klicken Sie dazu auf die entsprechende Kachel und ziehen Sie dort mit gedrückter Maustaste die Körner auf die gewünschte Kachel
Dabei werden die Körner aller berührten Fliesen gesammelt.
Um eine Mauer auf einer Kachel des Hamsterreviers zu platzieren, klicken Sie auf die Schaltfläche „Mauer setzen“ in der Symbolleiste (16
Symbolleistenschaltfläche von links)
Klicken Sie dann auf die entsprechende Kachel
Die Wand wird dort platziert (es sei denn, der Hamster ist dort)
Achtung: Befinden sich Körner auf der Kachel, werden diese gelöscht
Um nicht jedes Mal auf die Schaltfläche “Wand setzen” klicken zu müssen, wenn Sie eine Wand platzieren, können Sie auch Folgendes tun: Drücken Sie die Umschalttaste auf der Tastatur und klicken Sie auf die Schaltfläche “Wand setzen”, während Sie die Umschalttaste gedrückt halten
Solange Sie die Umschalttaste gedrückt halten, können Sie dort eine Mauer platzieren, indem Sie auf eine Kachel des Hamsterreviers klicken
Mauern können auch im Gebiet verlegt werden
Klicken Sie dazu auf die entsprechende Kachel und ziehen Sie dort mit gedrückter Maustaste die Wand auf die gewünschte Kachel
Körner auf Kacheln, die dabei berührt werden, werden gelöscht
Um einzelne Kacheln des Hamsterreviers zu löschen, also eventuell vorhandene Körner oder Mauern zu entfernen, müssen Sie zunächst auf die Schaltfläche „Kachel löschen“ in der Symbolleiste klicken (17
Klicken Sie auf die Symbolleisten-Schaltfläche von links)
Dadurch wird die Kachellöschfunktion aktiviert
Sie erkennen dies daran, dass der Hintergrund des Buttons nun dunkler erscheint
Solange die Funktion aktiviert ist, können Sie nun diese Kachel durch Anklicken löschen
Die Funktion Kachel löschen kann durch erneutes Klicken auf die Schaltfläche “Kachel löschen” deaktiviert werden
Die Deaktivierung erfolgt automatisch, wenn eine andere der Gebietsdesign-Schaltflächen gedrückt wird
Eine weitere Möglichkeit, Körner oder Mauern im Revier zu löschen, besteht darin, mit der rechten Maustaste ein Popup-Menü über den entsprechenden Elementen zu aktivieren und auf den darin erscheinenden Punkt „Löschen“ zu klicken in einer Datei speichern und später wieder laden
Um das aktuelle Gebiet zu speichern, aktivieren Sie im Menü „Stage“ den Menüpunkt „Speichern unter…“
Ein Dateiauswahldialog öffnet sich
Hier können Sie den Ordner auswählen und den Namen einer Datei eingeben, in der das aktuelle Gebiet gespeichert werden soll
Es ist auch möglich, das aktuelle Gebiet als Bild (gif- oder png-Datei) zu speichern
Eine entsprechende Funktion finden Sie im Menü „Stage“
Gespeicherte Hamsterreviere können mit dem Menüpunkt „Laden“ des Menüs „Stage“ neu geladen werden
Es erscheint ein Dateiauswahldialog, in dem Sie die zu ladende Datei auswählen können
Nachdem Sie auf die Schaltfläche OK geklickt haben, wird das Dialogfeld geschlossen und das entsprechende Hamstergebiet wiederhergestellt
Achtung: Der Zustand des Hamsterterritoriums, der vor Ausführung der Revierladefunktion gültig war, geht verloren
Gegebenenfalls vorher speichern
Sie können auch interaktiv einzelne Hamster-Befehle oder selbst definierte Funktionen und Prozeduren ausführen, beispielsweise zu Testzwecken
Aktivieren Sie dazu im Menü „Fenster“ den Eintrag „Befehlsfenster“
Es öffnet sich das sogenannte Kommandofenster (siehe Abbildung 6.15)
Abb
6.15: Kommandofenster
Das Befehlsfenster zeigt die 7 Hamster-Befehle (mit grünlichem Hintergrund) sowie die Prozeduren und Funktionen, die im aktuellen Hamster-Programm definiert wurden, als es zuletzt erfolgreich kompiliert wurde (mit orangem Hintergrund)
Beim Anklicken mit der Maus werden die entsprechenden Befehle ausgeführt
Die Ausführung erfolgt ohne Anzeige von Zwischenständen
Das heißt, wenn beispielsweise eine Prozedur rightTom durch dreimaliges Aufrufen des Befehls leftTom definiert wird und diese Prozedur rightTom im Kommandofenster aktiviert wird, dreht sich der Hamster eigentlich nur einmal um 90 Grad nach rechts.
Dauert die Ausführung eines Befehls länger als 5 Sekunden (die Funktion enthält dann vermutlich eine Endlosschleife), wird der Befehl abgebrochen und der Hamstersimulator komplett in den Ausgangszustand zurückgesetzt
Verfügt eine Prozedur oder Funktion über Parameter, erscheint im Befehlsfenster nach der Aktivierung ein Dialogfenster, in dem die entsprechenden aktuellen Parameterwerte eingetragen werden müssen
Hinweis: Derzeit wird nur die Eingabe von Werten der Java-Standarddatentypen (int, boolean, float,. ..) und die Eingabe von Zeichenketten (Strings) unterstützt
Beim Ausführen von Funktionen wird der gelieferte Wert in einem Dialogfenster angezeigt
Alternativ zur Verwendung des Befehlsfensters können die Hamster-Befehle auch interaktiv über ein Popup-Menü ausgeführt werden
Sie können dieses Popup-Menü aktivieren, indem Sie die rechte Maustaste über dem Hamster im Revier drücken (siehe Abbildung 6.16)
Abbildung 6.16: Befehls-Popup-Menü
(Erfolgreich kompilierte) Hamsterprogramme können mit Hilfe der in Abbildung 6.17 skizzierten Toolbar-Buttons ausgeführt werden
Alle Funktionen sind auch über das Menü „Simulation“ aufrufbar
Abb
6.17: Simulationsschaltflächen in der Werkzeugleiste
Bevor ein Hamsterprogramm ausgeführt werden kann, muss es erfolgreich kompiliert worden sein
Das aktuelle Hamsterprogramm kann dann durch Klicken auf den “Start/Fortfahren”-Button (18
Toolbar-Button von links) gestartet werden
Nach dem Start eines Hamsterprogramms wird der Hamster im Hamstergebiet aktiv und tut, was ihm das Programm vorschreibt
Während ein Hamsterprogramm läuft, ist der Editorbereich ausgegraut, dh während ein Programm läuft, können keine Änderungen am Quellcode vorgenommen werden
Die Ausführung eines Hamsterprogramms kann durch Anklicken des „Stop“-Buttons (21
Button der Symbolleiste von links) jederzeit abgebrochen werden
Wenn Sie ein laufendes Programm (vorübergehend) anhalten möchten, können Sie dies tun, indem Sie auf die Schaltfläche “Pause” (20
Schaltfläche in der Symbolleiste von links) klicken
Wenn Sie anschließend auf die Schaltfläche „Start/Fortsetzen“ klicken, wird die Programmausführung fortgesetzt
Treten bei der Ausführung eines Programms Laufzeitfehler auf, z
kracht ein Hamster gegen eine Wand, öffnet sich ein Dialogfenster mit einer entsprechenden Fehlermeldung
Nach einem Klick auf die OK-Schaltfläche im Dialogfenster wird das Hamsterprogramm beendet
Außerdem öffnet sich das Konsolenfenster, in dem auch die Fehlermeldung angezeigt wird
Während ein Hamsterprogramm läuft, ist es weiterhin möglich, das Revier neu zu ordnen, z
neue Körner und Wände zu platzieren
Mit dem Schieberegler ganz rechts in der Symbolleiste können Sie die Geschwindigkeit der Programmausführung beeinflussen
Je weiter links der Schieberegler steht, desto langsamer läuft das Programm
Je weiter Sie den Controller nach rechts bewegen, desto schneller flitzt der Hamster durch das Revier
Beim Testen eines Programms ist die Schaltfläche “Zurücksetzen” (19
Schaltfläche in der Symbolleiste von links) sehr hilfreich
Ein Klick darauf bewirkt, dass das Hamsterrevier auf den Zustand zurückgesetzt wird, in dem es sich vor dem letzten Programmstart befand
Die Schaltfläche „Vollständiges Zurücksetzen“ (23
Schaltfläche in der Symbolleiste von links) setzt das Gebiet in den Zustand zurück, der beim Öffnen des Hamstersimulators gültig war, sofern möglich
Sollte es bei der Verwendung des Hamstersimulators einmal zu einem unerklärlichen Fehler kommen, können Sie mit dieser Schaltfläche den Hamstersimulator neu initialisieren
Debugger sind Werkzeuge zum Testen von Programmen
Sie ermöglichen Ihnen, den Status des Programms während des Programmablaufs zu überwachen und bei Bedarf sogar interaktiv zu ändern
Das macht Debugger sehr hilfreich, wenn es darum geht, Laufzeitfehler und logische Programmfehler zu entdecken.
Mit dem Debugger des Hamstersimulators können Sie den Programmstatus überwachen, während ein Hamsterprogramm läuft
Während der Ausführung eines Hamsterprogramms können Sie sich anzeigen lassen, welche Anweisung des Quellcodes gerade ausgeführt wird und welche Werte die Variablen gerade speichern
Das interaktive Ändern von Variablenwerten wird derzeit nicht unterstützt
Die Debugger-Funktionen sind eng mit den Programmausführungsfunktionen verknüpft
Die Funktionen finden Sie im Menü „Simulation“
Es ist jedoch sinnvoll, die entsprechenden Schaltflächen in der Symbolleiste zu verwenden
Zu den Debugger-Funktionen gehören neben den Schaltflächen „Start/Resume“, „Pause“ und „Stop“ die beiden Schaltflächen „Step through“ und „Trace“ (siehe auch Abbildung 6.18)
Abb
6.18: Schaltflächen zum Debuggen in der Symbolleiste
Durch Klicken auf die Schaltfläche „Trace“ (24
Schaltfläche in der Symbolleiste von links) aktivieren bzw
(bei erneutem Klicken) deaktivieren Sie die Ablaufverfolgung des Debuggers
Bei Aktivierung öffnet sich das Debugger-Fenster (siehe Abbildung 6.19)
Sie können dies auch über das Menü “Fenster” sichtbar oder unsichtbar machen
Abb
6.19: Debugger-Fenster
Wenn die Ablaufverfolgung aktiviert ist und das Programm ausgeführt wird, wird der Befehl (oder die Zeile) im Editorbereich, der als nächstes ausgeführt wird, blau hervorgehoben
Beim Aufruf einer Prozedur oder Funktion wird zur entsprechenden Funktion gesprungen
Weiterhin werden im Debugger-Fenster der aktuelle Stack der Funktionsaufrufe (Name der Funktion und aktuelle Position der Funktionsausführung) und die aktuelle Belegung der Variablen angezeigt
Im linken Teil des Debugger-Fensters werden Informationen über die aktiven Funktionen angezeigt, jeweils der Name der Funktion und die aktuelle Ausführungsposition der Funktion
Unten steht die gerade aktive Funktion, darüber die Funktion, die diese Funktion aufgerufen hat usw
Ganz oben steht immer die Hauptfunktion
Im rechten Bereich des Debugger-Fensters werden die aktiven Variablen und ihre aktuellen Werte angezeigt
Die Darstellung erfolgt in einem Elementbaum, dh bei komplexen Variablen wie Arrays können Sie sich die Komponenten ansehen, indem Sie auf das Symbol vor dem Variablennamen klicken
Sie können die Programmausführung auch anhalten, indem Sie bei aktiviertem Trace auf die Schaltfläche „Pause“ klicken und mit der Schaltfläche „Start/Resume“ fortfahren
Auch die Geschwindigkeit der Programmausführung kann mit dem Schieberegler angepasst werden
Mit dem Toolbar-Button „Schritt für Schritt“ (19
Button der Toolbar von links) ist es möglich, ein Programm Schritt für Schritt, also Anweisung für Anweisung, auszuführen
Jedes Mal, wenn Sie auf die Schaltfläche klicken, wird die nächste Anweisung (oder Zeile) ausgeführt
Sie können das Programm mit schrittweiser Ausführung starten
Sie können das Programm jedoch auch zuerst normal starten, dann pausieren und von der aktuellen Anweisung aus weitergehen
Eine normale Fortsetzung des Programms ist jederzeit durch Klicken auf die Schaltfläche „Start“ möglich
EXCEL VBA Die wichtigsten Befehle #22 – On Error GoTo, Laufzeitfehler abfangen Update
Neues Update zum Thema laufzeitfehler 9 index außerhalb des gültigen bereichs
↓↓ Mein kostenloser EXCEL VBA Grundlagenkurs für Einsteiger ↓↓
Alle Videos \u0026 Codes – KOSTENLOS \u0026 OHNE ANMELDUNG: 💥 https://www.excel-vba-lernen.de/ 💥
Danke an Euch für den tollen Support und das motivierende Feedback! ❤
laufzeitfehler 9 index außerhalb des gültigen bereichs Einige Bilder im Thema

Weitere Informationen zum Thema anzeigen laufzeitfehler 9 index außerhalb des gültigen bereichs
Updating
Suche zum Thema laufzeitfehler 9 index außerhalb des gültigen bereichs
Updating
Sie haben gerade den Thementitel angesehen laufzeitfehler 9 index außerhalb des gültigen bereichs
Articles compiled by Tratamientorosacea.com. See more articles in category: DIGITAL MARKETING