Programmiervorkurs 2008



Ähnliche Dokumente
Programmiervorkurs SS 2011

Java: Vererbung. Teil 3: super()

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Einführung in die Java- Programmierung

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Programmierung

Programmieren in Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Zählen von Objekten einer bestimmten Klasse

5. Abstrakte Klassen

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Große Übung Praktische Informatik 1

Vorkurs C++ Programmierung

Grundlagen der Theoretischen Informatik, SoSe 2008

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Programmierkurs Java

Wie halte ich Ordnung auf meiner Festplatte?

Software Engineering Klassendiagramme Assoziationen

Anleitung über den Umgang mit Schildern

Primzahlen und RSA-Verschlüsselung

Arbeiten mit UMLed und Delphi

Zwischenablage (Bilder, Texte,...)

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

SEP 114. Design by Contract

Dokumentation für das Spiel Pong

1 Vom Problem zum Programm

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

.NET Code schützen. Projekt.NET. Version 1.0

Objektorientierte Programmierung

Leichte-Sprache-Bilder

Folge 18 - Vererbung

Erstellen einer digitalen Signatur für Adobe-Formulare

Professionelle Seminare im Bereich MS-Office

Das Leitbild vom Verein WIR

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

DOKUMENTATION VOGELZUCHT 2015 PLUS

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Einleitung. Hauptteil. Wir befinden uns nun im Demoarchiv.

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Kreativ visualisieren

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Übungsblatt 3: Algorithmen in Java & Grammatiken

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Einführung in die Informatik Tools

Statuten in leichter Sprache

2A Basistechniken: Weitere Aufgaben

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Animationen erstellen

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Outlook-Daten komplett sichern

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Kapitel 6. Vererbung

Algorithmen und Datenstrukturen

CodeSaver. Vorwort. Seite 1 von 6

Übungen Programmieren 1 Felix Rohrer. Übungen

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Javakurs 2013 Objektorientierung


Was ist Sozial-Raum-Orientierung?

AUSBILDUNG eines OBEDIENCE HUNDES

Einfügen von Bildern innerhalb eines Beitrages

Enigmail Konfiguration

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Was meinen die Leute eigentlich mit: Grexit?

Javakurs zu Informatik I. Henning Heitkötter

Wichtig ist die Originalsatzung. Nur was in der Originalsatzung steht, gilt. Denn nur die Originalsatzung wurde vom Gericht geprüft.

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Dow Jones am im 1-min Chat

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Geld Verdienen im Internet leicht gemacht

Die Windows 7 Sicherung im Detail

DAVID: und David vom Deutschlandlabor. Wir beantworten Fragen zu Deutschland und den Deutschen.

Fotos verkleinern mit Paint

Spielmaterial. Hallo! Ich bin der kleine AMIGO und zeige euch, wie dieses Spiel funktioniert. Viel Spaß! von Liesbeth Bos

Tutorium zur Mikroökonomie II WS 02/03 Universität Mannheim Tri Vi Dang. Aufgabenblatt 3 (KW 44) ( )

Kapitel 6. Vererbung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

5. Tutorium zu Programmieren

Alle gehören dazu. Vorwort

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

AutoCAD Dienstprogramm zur Lizenzübertragung

Innere Klassen in Java

Transkript:

Programmiervorkurs 2008 Es steht noch was aus Wir erinnern uns, jede Methode beginnt mit: public static Aber jetzt wollen wir endlich klären, was das eigentlich ist Fertig? Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 1 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 2 Mehrere Java Klassen Mehrere Java Klassen Wir kennen bisher nur Java Programme bestehend aus einer Datei Wie schaut es also aus wenn wir mehrere Dateien verwenden wollen? public class Eins { System.out.println("Hauptklasse!"); System.out.println(Zwei.methode()); Wir müssen zum compilieren nur diejenige Klasse compilieren, welche die main-methode enthält Java setzt Links zwischen den.class Dateien public class Zwei { public static String methode() { return "Und ich bin die 2. Klasse!"; :> javac Eins.java :> java Eins Hauptklasse! Und ich bin die 2. Klasse! Die zweite Klasse kann ganz normal mit Methoden gefüllt werden, die von der ersten Klasse aus aufgerufen werden können NAME_ZWEITE_KLASSE.methoden_name(PARAMETER_LISTE) public class Hauptprogramm { int add = MatheKlasse.add(2,4); int sub= MatheKlasse.sub(2,4); int by= MatheKlasse.by(2,4); Im Prinzip nichts anders als das, was wir schon können public class MatheKlasse { public static int add(int a, int b) { return a + b; public static int sub(int a, int b) { return a - b; public static int by(int a, int b) { return a * b; Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 3 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 4

Public vs. Private Und jetzt kommt noch das static Und was ist nun dieses public? public class Hauptklasse { Versteckklasse.run(); // nicht möglich: // Versteckklasse.doSomeWork(); public class Versteckklasse { public static void run() { dosomework(); private static void dosomework() { System.out.println( Unsichtbar von außen!"); Für das static brauchen wir aber ein bischen länger als für das public public bezeichnet, dass die Methoden oder Klassen von überall und von jedem benutzt werden dürfen Mit private werden Methoden nach außen hin versteckt Nur Methoden in der gleichen Klasse dürfen andere private Methoden benutzen Können auch Klassen private sein? Nein, hier gibt es noch andere Schlüsselwörter, aber nicht im Vorkurs Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 5 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 6 Konto Konto-Objekt mit eigenem Speicher Wir wollen eine Art Konto, z.b. ein Bankkonto, auf dass wir einzahlen und abheben können public class Konto { int konto = 0; konto += 100; konto -= 20; Das ist aber nicht schön, denn was macht man bei mehreren Konten? Mehrere Variablen für die Konten? Was mache ich wenn ich die Anzahl maximaler Konten nicht kenne? public class Bank { Konto k1 = new Konto(100); Konto k2 = new Konto(20); k1.einzahlen(50); k2.abheben(40); System.out.println(k1.guthaben()); System.out.println(k2.guthaben()); :> javac Test.java :> java Test 150-20 public class Konto { private int konto; public Konto(int startguthaben) { konto = startguthaben; public void einzahlen(int betrag) { konto += betrag; public void abheben(int betrag) { konto -= betrag; public int guthaben() { return konto; Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 7 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 8

Was ist da passiert? Der Konstruktor Bauplan für ein Konto: eine Java Klasse erzeugen einer Instanz mit new Konto( ) public Konto(int startguthaben) { konto = startguthaben; reales Konto reales Konto reales Konto Jedes Konto hat eine eigene Variable für den Kontostand Mit new wird aus dem Bauplan ein Objekt instanziiert (= erzeugt) Jedes Objekt hat im Arbeitsspeicher einen eigenen Bereich für seine Variablen Warum gibt es hier kein static und keinen Rückgabetyp? Ein Konstruktor erzeugt ein Objekt, eine Instanz der Java- Klasse Ein Konstruktor ist keine Methode, da er in der Regel keine weiteren Funktionen beinhaltet, außer eben ein Objekt zu erzeugen Der Konstruktor Name muß identisch sein mit dem Java-Klassen Namen Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 9 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 10 Pascal studiert Architektur Daniel studiert Architektur Er hat den Plan für ein Haus im Kopf Aber in eine Idee kann man nicht einziehen Der Plan muß erst in die Realität umgesetzt werden Und wenn es sich bewährt vielleicht sogar mehrfach und nicht nur einmal Pascal entwirft ein Haus Bauunternehmen baut 10 Stück Bauplan Jedes Haus hat einen eigenen Stromzähler Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 11 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 12

Konto-Objekt mit eigenem Speicher Bekannte Klassen/Objekt Systeme Konto Objekt 1 Konto Objekt 2 public class Konto { private int konto; public Konto(int startguthaben) { konto = startguthaben; public void einzahlen(int betrag) { konto += betrag; public void abheben(int betrag) { konto -= betrag; public int guthaben() { return konto; public class Bank { Konto k1 = new Konto(100); Konto k2 = new Konto(20); k1.einzahlen(50); k2.abheben(40); System.out.println(k1.guthaben()); System.out.println(k2.guthaben()); Die Variablen konto haben den gleichen Namen, aber im Arbeitsspeicher existieren sie an verschiedenen Position, jede für sich. Und nicht nur die Variablen, das ganze Objekt ist doppelt da. Man könnte sagen, die Variablen heißen eigentlich: k1/konto und k2/konto public class Konto { private int konto; public Konto(int startguthaben) { konto = startguthaben; public void einzahlen(int betrag) { konto += betrag; public void abheben(int betrag) { konto -= betrag; public int guthaben() { return konto; Beispiele: int[] i = new int[]; Integer.valueOf( ).intvalue(); System.out.println( ); stringvariable.equals(stringvariable) stringvariable.charat(n) Wann muß ich ein Objekt anlegen und wann nicht? Objekt: Sobald ich einen internen Zustand verwalten muß kein Objekt: Sobald der Ablauf einer Methode von nichts abhängt (außer den übergebenen Parametern (z.b. Math.sqrt(double d) oder Math.PI) Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 13 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 14 Vorgefertigte Klassen Innere Klassen Java liefert uns in speziellen Packeten Klassen und darin implementierte Funktionen mit Problem: Wir wollen eine Zufallszahl erzeugen Klasse Random existiert schon auf unserem PC muß jedoch extra eingebunden werden Wir können uns von ihr ein Objekt erzeugen.nextint(int n) import java.util.random; liefert eine Zufallszahl zwischen public class Zufall { [0..n[ Random rand = new Random(); (also von einschließlich 0 bis ausschließlich n) System.out.println(rand.nextInt(3)); public class AuessereKlasse { InnereKlasse ik = new InnereKlasse(); ik.dosomework(); class InnereKlasse { public InnereKlasse() { public void dosomework() { In einer Datei! Innere Klassen können nur aus der eigenen Klassen-Datei heraus benutzt oder instanziiert werden Für exklusive Objekte oder Funktionen Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 15 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 16

Variablen und Methoden Call by Reference vs. Call by Value public class Calling { int i = 5; addoneandprint(i); System.out.println(i); Container c = new Container(2); changecontainer(c); System.out.println(c.getI()); public static void addoneandprint(int i) { i = i + 1; System.out.println(i); private static void changecontainer(container c) { c.seti(7); System.out.println(c.getI()); class Container { private int i; public Container(int i) { this.i = i; public int geti() { return i; public void seti(int i) { this.i = i; Ausgabe auf der Konsole: 6 5 7 7 mit THIS unterscheidet man zwischen LOKALEN und GLOBALEN Variablen In Java gibt es zwei unterschiedliche Arten Variablen an Methoden zu übergeben Call by Value primitive Datentypen (int, char, String, boolean) werden als Kopie des ursprünglichen Werts an die Methode übergeben Änderungen an dieser übergebenen Variable haben keine Auswirkungen auf außen Objekte werden als Referenz an die Methode übergeben interne Änderungen am Objekt haben Auswirkungen nach außen Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 17 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 18 KarelJ Karels Welt Jetzt wollen wir mal richtig los legen, Objekte erstellen und damit etwas tun Streets KarelJ ist eine kleine Graphik-Bibliothek, die es erlaubt einen kleinen Roboter über eine Karte zu bewegen Karel kann außerdem Beeper ablegen und wieder aufnehmen Und in Karels Welt gibt es Wände Wall Beeper Sagt Hallo zu Karel! Avenues Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 19 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 20

Was kann Karel alles? Was kann Karel alles? Einen Schritt nach vorne gehen.move(); Sich nach links drehen. Einen Beeper aufsammeln/ablegen.pickbeeper();.putbeeper(); Feststellen ob er über einem Beeper steht.nexttoabeeper(); (boolean) Festellen ob er mindestens einen Beeper dabei hat.anybeepersinbeeperbag(); (boolean) Festellen ob er nach Norden/Süden/Westen/Osten schaut.facingnorth(); (boolean).facingsouth(); (boolean).facingwest(); (boolean).facingeast(); (boolean) Festellen ob er gegen eine Mauer schaut.frontisclear(); (boolean) Wir wenden das alles jetzt mal an, damit Ihr seht wie es funktioniert! Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 21 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 22 Karel in Aktion Objekt Konstruktor public class KarelAktion { World.setSize(6,8); World.setTrace(false); Robot r = new Robot(1, 2, 5, direction.north); r.putbeeper(); r. System.out.println("Wand: " + r.frontisclear()); Robot r = new Robot(avenue, street, beeper, looking); Wir erzeugen eine Variable vom Typ Robot mit Namen r Wir instanziieren ein Objekt vom Typ Robot und speichern es in die Variable r avenue: die x-koordinate street: die y-koordinate beeper: Anzahl Beeper im Rucksack looking: Richtung, in die Karel am Anfang schaut direction.north, direction.south, direction.east, direction.west Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 23 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 24

Karel in Aktion, aber wie? TurnRightRobot Wie compiliert man das jetzt? Ihr benötigt die Datei robots.jar von der Material-Seite Windows :> javac classpath robots.jar; KarelAktion.java :> java classpath robots.jar; KarelAktion Unix/Linux :> javac classpath ~/robots.jar:. KarelAktion.java :> java classpath ~/robots.jar:. KarelAktion Wir haben gesehen, dass sich Karel nach links drehen kann Aber nach rechts gibt es nicht, wäre aber schon praktisch Wir müssen diese Funktion selbst implementieren Wir schreiben eine neue TurnRightRobot-Klasse, die nach rechts drehen enthält und lassen diese TurnRightRobot-Klasse alle Eigenschaft von der Robot-Klasse erben Unten im Pool, wenn ihr die.bashrc und robots.jar ins home entpackt habt :> compilerobot KarelAktion.java :> runrobot KarelAktion Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 25 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 26 TurnRightRobot extends und super public class TurnRightRobot extends Robot { public TurnRightRobot(int arg0, int arg1, int arg2, direction arg3) { super(arg0, arg1, arg2, arg3); public void turnright() { TurnRightRobot r = new TurnRightRobot(2, 2, Integer.MAX_VALUE, direction.north); System.out.println("Ich kann mich jetzt rechts herum drehen..."); r.turnright(); In der Java Klasse TurnRightRobot wurde rechts Drehen mittels 3 mal links Drehen implementiert Aber in der ganze Klasse sind die bekannten Methoden move(), putbeeper() etc. nicht enthalten, warum? public class TurnRightRobot extends Robot super(arg0, arg1, arg2, arg3); Die Klasse TurnRightRobot extends (erweitert) die Klasse Robot d.h. dass die neue Klasse alle Methoden, globalen Variablen und sonstigen Eigenschaften von der Klasse Robot erbt Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 27 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 28

Vererbung TurnRightRobot public class TurnRightRobot extends Robot { public TurnRightRobot(int arg0, int arg1, int arg2, direction arg3) { super(arg0, arg1, arg2, arg3); public void turnright() { 3 mal links = 1 mal rechts extends importiert alle Eigenschaften von Robot super ruft den Konstruktor von Robot auf jedes 2-beinige Lebewesen hier im Baum ist ein Säugetier, da es die Eigenschaft geerbt hat TurnRightRobot r = new TurnRightRobot(2, 2, Integer.MAX_VALUE, direction.north); System.out.println("Ich kann mich jetzt rechts herum drehen..."); r.turnright();.turnright() auf einer Instanz von TRB steht absofort als Befehl zur Verfügung Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 29 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 30 Treppensteigen Treppensteigen public class TreppensteigerRobot extends TurnRightRobot { public TreppensteigerRobot(int arg0, int arg1, int arg2, direction arg3) { super(arg0, arg1, arg2, arg3); // Methode zum Treppe steigen TreppensteigerRobot r = new TreppensteigerRobot(2, 2, Integer.MAX_VALUE, direction.north); r.steigetreppe(5); public class TreppensteigerRobot extends TurnRightRobot { public TreppensteigerRobot(int arg0, int arg1, int arg2, direction arg3) { private void steigeeinestufe() { putbeeper(); move(); turnright(); move(); public void steigetreppe(int stufen) { for (int i = 0; i < stufen; i++) { this.steigeeinestufe(); Basisfunktionen in einer eigenen Methode; Code auslagern! Durch Codeauslagerung werden fast alle Methoden schön übersichtlich Aber funktioniert das auch? Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 31 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 32

Wie haben einen Fehler gemacht Zustandserhaltung DAS ist keine Treppe! Vor der 1. Stufe: Schlagwort: Zustandserhaltung! Was ist das? Bsp: Drucker Eurer Kommilitone druckt im Pool 500 Seiten Script aus Ihr wollt als nächstes drucken, aber das Papier ist aus. Ärgerlich! Euer Kommilitone hätte Papier nachfüllen sollen verlaßt einen Arbeitsplatz so, wie Ihr ihn vorgefunden habt, damit Eure Nachfolger keine Probleme haben Nach der 1.Stufe: Zustandserhaltung! Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 33 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 34 Treppensteigen korrigiert Jetzt wird s erst richtig lustig! public class TreppensteigerRobot extends TurnRightRobot { public TreppensteigerRobot(int arg0, int arg1, int arg2, direction arg3) { private void steigeeinestufe() { putbeeper(); move(); turnright(); move(); public void steigetreppe(int stufen) { for (int i = 0; i < stufen; i++) { this.steigeeinestufe(); Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 35 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 36

Jetzt wird s erst richtig lustig! BoingRobot Wir wollen ans Ziel: der Doppel-Beeper Laufregeln: Wir laufen bis wir vor einer Wand stehen Liegt ein Beeper unter uns, dann laufen wir nach rechts weiter Liegt kein Beeper unter uns, dann laufen wir nach links weiter public class BoingRobot extends TurnRightRobot { public BoingRobot(int arg0, int arg1, int arg2, direction arg3) { super(arg0, arg1, arg2, arg3); // go Methode World(); // Setup der Welt BoingRobot r = new BoingRobot(2, 1, 0, direction.north); r. Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 37 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 38 Die go-methode Die go-methode public void { Wir laufen gerade aus, wenn wir keine Wand im Sichtfeld haben -> move() sonst (Wir haben ein Wand gerade aus) -> Wenn wir auf einem Beeper stehen -> Stehen wir auf einem zweiten Beeper? -> Ende! sonst (Wir stehen nicht auf einem zweiten Beeper) -> turnright() sonst (Wir stehen auf keinem Beeper) -> turnleft() public void { if (this.frontisclear()) { this.move(); sonst (Wir haben ein Wand gerade aus) -> Wenn wir auf einem Beeper stehen -> Stehen wir auf einem zweiten Beeper? -> Ende! sonst (Wir stehen nicht auf einem zweiten Beeper) -> turnright() sonst (Wir stehen auf keinem Beeper) -> turnleft() Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 39 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 40

Die go-methode Die go-methode public void { if (this.frontisclear()) { this.move(); else { if (this.nexttoabeeper()) { this.pickbeeper(); Stehen wir auf einem zweiten Beeper? -> Ende! sonst (Wir stehen nicht auf einem zweiten Beeper) -> turnright() public void { if (this.frontisclear()) { this.move(); else { if (this.nexttoabeeper()) { this.pickbeeper(); if (this.nexttoabeeper()) { this.pickbeeper(); this.turnoff(); sonst (Wir stehen nicht auf einem zweiten Beeper) -> turnright() else { this. else { this. Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 41 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 42 Die go-methode Exceptions (Ausnahmen) public void { if (this.frontisclear()) { this.move(); else { if (this.nexttoabeeper()) { this.pickbeeper(); if (this.nexttoabeeper()) { this.pickbeeper(); this.turnoff(); else { this.turnright(); else { this. Rekursions-Anker Alle haben bestimmt schon mal sowas gesehen: public class AIOOBE { int[] ia = { 0, 1, 2, 3, 4 ; for (int i = 0; i < 6; i++) { System.out.println(i + " - " + ia[i]); produziert auf der Konsole: Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at AIOOBE.main(AIOOBE.java:5) klar, denn wir versuchen auf ia[5] zu zugreifen, obwohl es ja nur von ia[0] bis ia[4] geht Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 43 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 44

Exceptions (2) Exceptions catchen Anderer Fall: Division durch 0 Exception in thread "main" java.lang.arithmeticexception: / by zero at AIOOBE.main(DivByZero.java:3) Es handelt sich um Laufzeitfehler, also Fehler, die nicht vom Compiler erkannt werden semantische Fehler des Programms Können wir solche Fehler bemerken, behandeln und dem Programm die Chance geben weiter zu laufen? Ja, natürlich!! Wenn eine Exception auftritt fangen und weiter machen als wenn nichts geschehen wäre public class DivByZeroByTwo { double r = Double.MIN_VALUE; try { r = 5 / 0; catch (ArithmeticException e) { System.out.println("Problem behoben!"); r = 1; finally { r = r * 2; System.out.println(r); Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 45 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 46 Exception Struktur Mensa!? allgemeine Struktur try { PROGRAMM CODE catch (EXCEPTION e1) { catch (EXCEPTION e2) { catch (EXCEPTION e3) { finally { Es können beliebig viele Exceptions nach einem Try- Block gefangen und behandelt werden Der Name einer Exception kann entweder aus der Fehlermeldung an sich abgelesen werden dann kann man beim ersten Auftreten des Fehlers AB DANN darauf reagieren oder man baut try-catch auf Verdacht ein Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 47 Programmiervorkurs WS 2009 Fachbereich Informatik TU Darmstadt 48