JAVA und OOP Teil 2: Objektorientierung.

70
www.munz-udo.d e 1 JAVA und OOP JAVA und OOP Teil 2: Objektorientierung

Transcript of JAVA und OOP Teil 2: Objektorientierung.

Page 1: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 1

JAVA und OOPJAVA und OOP

Teil 2: Objektorientierung

Page 2: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 2

ObjektorientierungObjektorientierung

Daten und Methoden bilden eine Einheit

Daten können nur mit festgelegten Methoden geändert werden

Methoden können nicht auf fremde Daten angewandt werden.

Page 3: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 3

Ziele der ObjektorientierungZiele der Objektorientierung

Höhere Datensicherheit (durch Kapselung) Erleichterte Pflege des Quellcodes (durch

Kapselung) Höhere Produktivität (durch Vererbung) Verbesserte Zugangskontrolle im

Quellcode (durch Getter- und Setter Methoden)

Page 4: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 4

KlassenKlassen

Eine Klasse stellt den Bauplan für verschiedene aber gleichartige Dinge (Objekte) dar.

In der Klasse werden die möglichen Eigenschaften der Objekte und ihre Verhaltensweisen in Form von Methoden festgelegt.

Page 5: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 5

ObjekteObjekte

Ein Objekt gehört grundsätzlich zu einer Klasse

Es gibt jedoch auch sogenannte abstrakte Klassen (abstract classes), die über keinerlei Objekte verfügen.

Page 6: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 6

InstanzenInstanzen

• Konkretisierung eines Objekts:• Instanzen benötigen

- realen Speicherplatz mit - realen Werten.

Page 7: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 7

Das Programm Das Programm fahrkartefahrkarte

Das Programm fahrkarte simuliert eine Fahrkarte für den öffentlichen Nahverkehr.

Page 8: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 8

Eigenschaften einer Eigenschaften einer FahrkarteFahrkarte

Anzahl der TarifzonenDatumReduzierter Preis? Fahrpreis

Page 9: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 9

Vorgänge im Vorgänge im Fahrkartenautomaten Fahrkartenautomaten

(Methoden)(Methoden)

Karte drucken Fahrpreis berechnen

(von der Fahrstrecke abhängen ) Karten zu ermäßigtem Preis? Vierfachnetzkarte Zählwerk

Page 10: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 10

Kapselung (encapsulation)Kapselung (encapsulation)PrinzipPrinzip

Möglichst alle Variablen sind intern vereinbart (private).

Zugang nur über Getter- und Setter-Methoden

Page 11: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 11

Kapselung (encapsulation)Kapselung (encapsulation)VorteileVorteile

Sicherheit gegen Änderungen von außen

Sicherheit bei Veränderungen im Innern

Vereinfachte Nutzung Verringerte Dokumentationslast Zugangsberechtigungen

Page 12: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 12

Klassenkonstanten Klassenkonstanten (class constants)(class constants)

Die Konstante dPreisProZone wird der Klasse fahrkarte selbst zugeordnet, es handelt sich somit um eine Klassenkonstante.

Page 13: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 13

Attribute von Attribute von dPreisProZonedPreisProZone

final Inhalt kann nicht geändert werden static Klassenkonstante double Inhaltstyp (Kommazahl).

final static double dPreisProZone=1.3;

final static double dPreisProZoneReduziert=0.6;

Page 14: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 14

Klassenvariable (class fields)Klassenvariable (class fields)

Beispiel: Die Gesamtzahl aller in unserem Automaten erstellten Fahrkarten.

o Inhalt kann nicht in einer Konstanten gespeichert werden, da sich der Wert laufend ändert.

o Es macht wenig Sinn, diese Information einer einzelnen Fahrkarte zuzuordnen.

o Folgerung: Klassenvariable

static int iVerkaufteKarten=0;

Page 15: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 15

KontrollfragenKontrollfragen

1) Unterscheiden Sie Klasse und Instanz auf der Grundlage der Programmiersprache JAVA ™

2) Welche Eigenschaften (properties) einer Fahrkarte sollten Ihrer Meinung nach als Klassenkonstanten , Instanzvariablen oder als Klassenvariablen deklariert werden? Begründen Sie Ihre Antwort! 

3) Beschreiben Sie das Konzept der Kapselung.

4) Nennen Sie Vorteile der Kapselung 

Page 16: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 16

VererbungVererbung

Neue Definition: Klasse dauerkarte als Erweiterung von fahrkarte

– Methoden und Eigenschaften, die dauerkarte von fahrkarte übernimmt, nennt man vererbte Methoden (inherited).

– fahrkarte ist Superklasse (superclass) zu dauerkarte.

– dauerkarte ist von fahrkarte abgeleitet.– Jeder Dauerkarte besitzt alle Eigenschaften und

Methoden einer normalen Fahrkarte !

•package eins.munz.fahrkarte;•public class dauerkarte extends fahrkarte

Page 17: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 17

Erweiterungen zu Erweiterungen zu FahrkartenFahrkarten

1. Erweitern Sie die Ausgabemethode für die Dauerkarten so, dass die Inhabernamen mit ausgedruckt werden.

2. Ändern Sie das Konzept „Kartenzahl“ so ab, dass nach Erreichen eines Schwellenwertes beim Ausdrucken einer Fahrkarte ein entsprechender Hinweis erscheint.

Page 18: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 18

Verwandte AufgabenVerwandte Aufgaben Realisieren Sie die folgenden Ideen in

Ihrem Programm.a) Wenn man gleichzeitig Hin- und Rückfahrt

bucht, reduziert sich der Gesamtpreis.

b) Wie wär’s mit einer Rabattstaffel für Großkunden?

c) Wer ein Fahrrad oder einen Hund im Bus befördern möchte, braucht eine besondere Fahrkarte.

d) Sonntags fahren alle (auch Hunde) zum reduzierten Preis!

Page 19: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 19

Weitere KlassendefinitionenWeitere Klassendefinitionen

Formulieren Sie schriftlich in Umgangssprache (also ohne JAVA) eine mögliche Klassendefinition (mit Eigenschaften und Methoden) für folgende Alltagsgegenstände:– Getränkedosen– Autos– Computermaus– Bücher in einem Ausleihesystem

– Abiturnoten eines Schülers bzw. einer Schülerin

Page 20: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 20

StandardkreisStandardkreis

Eigenschaften Mittelpunktskoordinaten Radius

Methoden Flächeninhalt berechnen Umfang berechnen feststellen, ob er sich mit

einem anderen Kreis schneidet.

M(mx,my)

P(px,py)

Page 21: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 21

kreis2.javakreis2.javapublic class kreis2 { public int iMitteX,iMitteY, iRadius; public double dUmfang, dInhalt; public static double PI() {return Math.atan(1)*4;} public void dRechneUmfang() {dUmfang=2*PI()*iRadius;} public void dRechneInhalt() {dInhalt=PI()*iRadius+iRadius;} public int iAnzahlSchnittpunkte(kreis2 k) { }

Page 22: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 22

Konstruktor zu kreis2.javaKonstruktor zu kreis2.java /** Creates new kreis2 constructor*/public kreis2(int iMitteX,int iMitteY, int iRadius)

{

this.iMitteX=iMitteX;

this.iMitteY=iMitteY;

this.iRadius=iRadius;

dRechneUmfang();

dRechneInhalt();

}

Page 23: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 23

kreis3.javakreis3.javapublic class kreis3{ private int iMitteX,iMitteY, iRadius;

private double dUmfang, dInhalt;private void dRechneUmfang() { dUmfang=2*Math.PI*iRadius; }private void dRechneInhalt() { Inhalt=Math.PI*iRadius +iRadius;}

}

Page 24: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 24

SetterSetter

public void setRadius(int iRadius)

{ this.iRadius=iRadius;

dRechneUmfang();

dRechneInhalt();

}

Page 25: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 25

AusgabeAusgabe

public void ausgabe() { System.out.println("Radius: "+iRadius); System.out.println("Umfang: "+dUmfang); System.out.println("Flächeninhalt: "+dInhalt);

}

Page 26: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 26

Objekte vergleichenObjekte vergleichen

public boolean equals(kreis3 k2)

{

return (this.iRadius==k2.iRadius)

&&(this.iMitteX==k2.iMitteX)

&&(this.iMitteY==k2.iMitteY);

}

Page 27: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 27

SchuleSchuleSchuleNameSchulklassen...........................Versetzung durchführenneue Schulklasse erzeugen

Page 28: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 28

SchulklasseSchulklasse

Schulklasse NameSchülerGewichtung schriftlich-mündlichKlassenlehrerSchnitt aller Gesamtnoten............................................Schnitt berechnenneuen Schüler erzeugen

Page 29: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 29

SchülerSchülerSchülerNameDurchschnittsnoteschriftliche Notemündliche Notebestanden.....................................Noten eingebenNotenschnitt berechnenfeststellen, ob bestanden

Page 30: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 30

AttributeAttribute public:

– Die Variable oder Methode ist in der Klasse selbst, in an-geleiteten Klassen und in übergeordneten Klassen, die unsere Klasse aufrufen, sichtbar (liberale Variante).

private: – Die Variable oder Methode ist nur in der Klasse sichtbar. in der

sie vereinbart wurde (sichere Variante). Untergeordnete (abgeleitete) oder übergeordnete (aufrufende) Klassen sehen diese Variable nicht.

protected: – Variablen mit diesem Attribut sind in der eigenen Klasse und in

abgeleiteten Klassen sichtbar. Aufrufer sehen diese Variablen nur, wenn sie im gleichen Paket aufrufen.

Page 31: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 31

ÜberladungÜberladung

Zwei Prozeduren mit gleichem Namen, die sich aufgrund der Anzahl bzw. Typen der Parameter unterscheiden.

Page 32: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 32

Überladung (Beispiel)Überladung (Beispiel)public schulemain(String name)

{ this.sName=name;

System.out.println(sName); }

schulemain gymLoerrach

= new schulemain("Gymnasium Loerrach");

-----------------------------------------------------------------------

//zweiter Konstruktor / überladen public schulemain() { this.sName="Die arme Schule hat keinen Namen."; System.out.println(sName); }

schulemain gymLoerrach = new schulemain();

Page 33: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 33

Die Klasse Die Klasse schulklasseschulklasse public class schulklasse { public String sName; private String sLehrer; private double dGewichtung; /** Creates new schulklasse */ public schulklasse(String name, String lName, double

gewichtung) { this.sName=name; this.sLehrer=lName; this.dGewichtung=gewichtung; System.out.println (this.sName+" "+this.sLehrer+" "+

this.dGewichtung); }}

Page 34: JAVA und OOP Teil 2: Objektorientierung.

34 www.munz-udo.de

Aufrufe von schulklasseAufrufe von schulklasse

schulklasse klasse1=new schulklasse("11a", „Munz",1.5);

schulklasse klasse2=new schulklasse("12a", "Henne",2);

Page 35: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 35

Die Klasse Die Klasse schuelerschueler public class schueler{ public String sName; private double dDurchschnitt; protected boolean bHatBestanden; private int iMuendlich; private int iSchriftlich; public void ausgabe(String Klassenname) {System.out.print(Klassenname+" "); System.out.print(this.sName+" "); System.out.print(this.dDurchschnitt+" "); System.out.println(this.bHatBestanden); }

Page 36: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 36

Setter und KonstruktorSetter und Konstruktor

public void SetSchuelerdaten(String name, double schnitt,boolean hatBestanden, int muendlich, int schriftlich)

{ this.sName=name; this.dDurchschnitt=schnitt; this.bHatBestanden=hatBestanden; }/** Creates new schueler */ public schueler(String name) { SetSchuelerdaten(name,0,false,0,0); ausgabe("test"); } }

Page 37: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 37

TestmethodenTestmethodenMethode Eingabe(n)

Setter Methode

AusgabeGetter Meth.

Ergeb-nis

Da-tum

Tes-ter

Konstruktor SCHULE-MAIN

"Gymnasium Loerrach"

"Gymnasium Loerrach"

ok 29.12.01

Pl

Konstruktor SCHUL-KLASSE

("11a",„Munz",1);("7b","Henne",3)("8a","Lost",1.5)

("11a",„Munz",1);("7b","Henne",3)("8a","Lost",1.5)

ok 29.12.01

He

setNoten 0,01,123,3213,1212,13

0,01,123,3213,1212,13

ok;

neg Ein-gab. feh-len

30.12.01

Pl

Page 38: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 38

Weiterführende TestaufgabenWeiterführende Testaufgaben 1) Testen sie Ihr Programm gemäß den oben beschriebenen

Methoden.

2) Entwerfen Sie weitere Testfälle.

3) Lösen Sie die im Text erwähnten Probleme.

4) Definieren Sie vier verschiedene Standardschüler(innen) bzw. Standardklassen, die möglichst viele Testfälle abdecken.

5) Konzipieren Sie weitere Methoden zur Oberstufenverwaltung.

6) Informieren Sie sich bei Ihrer Schulleitung über die tat-sächlich für die Oberstufenverwaltung eingesetzte Software. Welche Methoden der kommerziellen Software könnten Sie ebenfalls erstellen?

Page 39: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 39

ContainerContainer

Definition:– WINDOWS Fenster der obersten

hierarchischen Stufe (das allumfassende Fenster, in dem das gesamte Programm abläuft).

 Name:– contentPane, zusammen gesetzt aus

content = Inhalt und Pane= (Fenster-) Scheibe.

Page 40: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 40

LayoutLayoutGrid

Flow

Border

Page 41: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 41

Beispiel: EuroBeispiel: Euro

Erstellen Sie ein JAVA Programm, das einen Eurobetrag in eine andere Währung (z.B. US Dollar) umrechnet. Verwenden Sie eine GUI - Oberfläche für das Programm.

Passen Sie die Umrechnung dem aktuellen Dollarkurs an.

Erweitern Sie das Programm so, dass auch Schweizer Franken umgerechnet werden können.

Page 42: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 42

TemperaturumrechnungTemperaturumrechnung

Nach Eingabe einer Temperatur in Grad Celsius ist die Angabe in Grad Réaumur und Grad Fahrenheit umzurechnen. Dabei gelten folgende Umrechnungen: 0°C = 0°R = 32°F und 100°C=80°R=212°F.

Ändern Sie Teil 1) wie folgt ab: Nach Eingabe einer Temperatur in Grad Celsius in Grad Réaumur oder in Fahrenheit sind die jeweils anderen Temperaturen zu berechnen.

Fügen Sie eine Kelvin-Skala ein.

Page 43: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 43

Auerbacher TelekomIhre Rechnung

Rechnungsdatum 27.1.02Rechnungsmonat Januar 2002Kundennummer 1234567890

Munz UdoBlauenstr. 4779589 Binzen

 Artikel oder Leistung Menge Nettobetrag Nettogesamtbetrag Ust in%

 T- DSL Telefonanschluss 1 28,55 28,55 1683 City-Verbindungen 106 0,0264 2,80 1629 Deutschlandverbindungen 250 0,0396 9,90 16

 T-DSL Flat 21,55 16

 ZWISCHENSUMME xxxUmsatzsteuer 16% auf xxx yyy

 Rechnungsbetrag zzz

Page 44: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 44

Telefon-Telefon-rechnungrechnung

Erstellen Sie ein JAVA - Programm, das aus der Anzahl der genutzten Telefoneinheiten den Gesamtpreis inkl. Grundgebühr berechnet. Die Preise entnehme man der oben abgebildeten Telefonrechnung. Der Grundpreis und die Gebühr einer einzelnen Telefoneinheit sollen als lokale Konstante (final) realisiert werden.

Page 45: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 45

Aufgaben 1-3Aufgaben 1-3

1. Erweitern Sie das Programm Telefon so, dass der Grundpreis und der Preis für eine einzelne Gebühreneinheit auf der Oberfläche sichtbar sind.

2. Erstellen Sie ein entsprechendes Programm für Handy- Gebühren. Es genügt, die Gebühren zur Standardnutzerzeit (höchste Gebührenklasse) zu errechnen. Eingegeben wird nun nicht mehr die Anzahl der Gebühreneinheiten, sondern die Gesamtzeit der Verbindungen.

3. Schreiben Sie ein JAVA - Programm, das nach Eingabe der Anzahl den Kaufpreis für Disketten (bzw. CD-

Rohlinge) inklusive 16% Mehrwertsteuer bestimmt.

Page 46: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 46

Aufgaben 4-6Aufgaben 4-6

4. Erweitern Sie das Programm so, dass mehrere Produkte (z.B. CD-Rohlinge und Disketten und Tintenpatronen und...) geordert werden können. Das Programm soll alles fein säuberlich auf der Oberfläche auflisten und den Gesamtpreis berechnen.

5. Erstellen Sie ein Programm, das Antwort auf die Frage gibt: Wie lange kann ich mit einem vorgegebenen Betrag telefonieren? Man differenziere nach Entfernungszonen.

6. Rechnen Sie einen in Sekunden vorgegebenen Wert um in eine Zeitangabe von Tagen, Stunden, Minuten und Sekunden.

Page 47: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 47

Aufgaben 7-8Aufgaben 7-8

7. Rechnen Sie einen in Tagen, Stunden, Minuten und Sekunden vorgegebenen Wert in eine Zeitangabe von Sekunden um.

8. Berechnen Sie aus zwei Zeitangaben eines Tages die Dauer der Zeitspanne dazwischen in Sekunde

Page 48: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 48

Münzen zählenMünzen zählen

Erstellen Sie ein einfaches Zählprogramm, das Euromünzen durch Mausklick aufsummieren soll. Die Benutzeroberfläche soll verschiedene Buttons für verschiedene Münzen enthalten und das Ergebnis (Summe) anzeigen.

Page 49: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 49

KomponentenKomponenten

Notwendige KomponentenMindestens sieben verschiedene Buttons zur

Eingabe

Anzeige für das Endergebnis

Überschrift

Hilfreiche Komponente: FehlerkorrekturLetzte Eingabe (Mausklick) rückgängig machen.

Page 50: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 50

BanknotenaufgabenBanknotenaufgaben Erweitern Sie das Programm so, dass auch

die Beträge von Euroscheinen abgearbeitet werden können.

Ordnen Sie die Buttons in einer Form an, die ergonomisch sinnvoll ist. Dabei müssen nicht alle Buttons gleich groß bleiben. Erläutern Sie Ihren Ansatz.

Wie kann man mehrere Eingaben rückgängig machen?

Ist es sinnvoll, jede Eingabe auch in der Ausgabe anzuzeigen?

Page 51: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 51

Elementarer KreisElementarer KreisDer Radius r

bleibt konstant, der Winkel w gegen die Horizontale ändert sich zwischen Null und 2 (Bogenmaß!)

.

M(mx,my)

P(px,py)

Page 52: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 52

PolarkoordinatenPolarkoordinaten

Radius und Winkel legen den Punkt fest

Page 53: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 53

Kreis und SpiraleKreis und Spirale

Page 54: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 54

Kreisaufgaben 1-3Kreisaufgaben 1-3

1. Wie ändert sich das Ergebnis, wenn man die Schleife bis 4Pi laufen läßt?

2. Ändern Sie die Schleife so, dass der Anfangswert Null benutzt werden kann.

3. Überlegen Sie, ob man das Problem auch mit einer for-Schleife lösen könnte. Begründen Sie Ihr Ergebnis.

Page 55: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 55

Kreisaufgaben 4-6Kreisaufgaben 4-6

4. Erstellen Sie ein Konzept für eine Kreisprogramm ohne Polarkoordinaten.

5. Erzeugen Sie aus dem Kreisprogramm die Graphikdarstellung einer Spirale. Welche Änderungen sind nötig?

6. Was berechnet folgende Anweisung: dPi = Math.atan(1)*4.0 ?

Page 56: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 56

ArrayArray Mehrere Variablen des gleichen Grundtyps

(primitive type, z.B. int oder double), die den gleichen Variablennamen tragen und durch einen ganzzahligen Index unterschieden werden können.

Der Index beginnt stets bei Null und endet dort, wo der maximale Index erreicht ist. Dieser maximale Index wird bei der Deklaration festgelegt. Eine Vereinbarung der Form feld = int[20] reserviert den Speicherplatz für 21 (!) Integervariablen.

Page 57: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 57

ArrayListsArrayLists

Ähnelt in Funktion dem Array, kann jedoch dynamisch, also zur Run-Time (Laufzeit), erweitert werden!

Page 58: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 58

Variable vom Typ ArrayListVariable vom Typ ArrayList

protected static ArrayList

alFeld=new ArrayList();

Static

{alFeld.add(BigInteger.valueOf(1));

alFeld.add(BigInteger.valueOf(1));}

Page 59: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 59

Fibonacci FolgeFibonacci Folge1,1,1,1,2,1,1,2,3,1,1,2,3,5,1,1,2,3,5,81,1,2,3,5,8,13,...

an+1=an+an-1

für n€ N, n>1

und

a1=1 a2=1

Page 60: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 60

Fibo rechnet neues FolgegliedFibo rechnet neues Folgeglied

public static BigInteger fibo(int i){for (int iLaenge=alFeld.size();iLaenge<i;iLaenge++) { BigInteger letzteFibo= (BigInteger) alFeld.get(iLaenge-1); BigInteger vorletzteFibo= (BigInteger) alFeld.get(iLaenge-2); BigInteger naechsteFibo=

letzteFibo.add(vorletzteFibo); alFeld.add(naechsteFibo); } return (BigInteger) alFeld.get(i-1);}

Page 61: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 61

Fibo HauptprogrammFibo Hauptprogramm

public static void main(String args[])

{

for (int iLauf=111; iLauf<141; iLauf++)

{System.out.println(fibo(iLauf));}

System.out.println(fibo(115));

System.out.println(fibo(140));

System.out.println(fibo(141));

}

Page 62: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 62

Fibonacci AusgabeFibonacci Ausgabe 781774079430987230203437 1264937032042997393488322 2046711111473984623691759 3311648143516982017180081 5358359254990966640871840 8670007398507948658051921 14028366653498915298923761 22698374052006863956975682 36726740705505779255899443 59425114757512643212875125 96151855463018422468774568 155576970220531065681649693 251728825683549488150424261 407305795904080553832073954 659034621587630041982498215 1066340417491710595814572169 1725375039079340637797070384 2791715456571051233611642553

4517090495650391871408712937 7308805952221443105020355490 11825896447871834976429068427 19134702400093278081449423917 30960598847965113057878492344 50095301248058391139327916261 81055900096023504197206408605 ...............

Page 63: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 63

Arrays sortieren über Arrays sortieren über MinimumMinimum

arraySort sucht man in einem bestehenden Feld zuerst das kleinste Feldelement (Minimum), sichert es in einer Hilfsvariablen, verschiebt alle darunter liegenden Feldelemente um eine Position nach oben und heftet das zuvor gerettete Minimum ans Ende des Feldes. Damit haben wir das Minimum sicher im letzten Feldelement unter gebracht.

Im nächsten Durchgang sucht man nur noch bis zum vorletzten Element nach einem Minimum und verfährt erneut wie oben. Mit jedem Durchgang sitzt ein weiteres

Element an der richtigen Stelle.

Page 64: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 64

SortierfortschrittSortierfortschritt9216 7489 4291 8611 1430 8334 4020 9400 899 2787

9216 7489 4291 8611 1430 8334 4020 9400 2787 899

9216 7489 4291 8611 8334 4020 9400 2787 1430 899

9216 7489 4291 8611 8334 4020 9400 2787 1430 899

9216 7489 4291 8611 8334 9400 4020 2787 1430 899

9216 7489 8611 8334 9400 4291 4020 2787 1430 899

9216 8611 8334 9400 7489 4291 4020 2787 1430 899

9216 8611 9400 8334 7489 4291 4020 2787 1430 899

9216 9400 8611 8334 7489 4291 4020 2787 1430 899

Page 65: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 65

Sortieraufgaben 1-3 Sortieraufgaben 1-3

1. Erweitern Sie das oben beschriebene Verfahren so, dass eine wirklich große Anzahl Integerzahlen sortiert werden kann.

2. Verändern Sie das obige Programm so, dass nach Bestimmung des Minimums nur ein einziger Tausch erfolgt (aktuelles Minimum an den Schluss, dortige Zahl an bisherige Position des Minimums).

3. Führen Sie den oben beschriebenen Sortieralgorithmus mit einer ArrayList statt einem Array durch. Welche Probleme tauchen auf?

Page 66: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 66

Sortieraufgaben 4-5Sortieraufgaben 4-5 4. Sortieren Sie ein Integerfeld bei der Entstehung.

Sobald ein neuer (Zufalls-)Wert berechnet wurde, sucht man seine adäquate Position im Feld, schafft Platz durch Verschieben (Nach oben oder nach unten? Nach oben und unten?) und fügt anschließend ein .

5. Sortieren Sie ein Integerfeld bei der Entstehung, in dem Sie eine Vorsortierung einsetzen. Diese funktioniert so, dass man bei jeder neuen Zahl entscheidet, ob sie zur ersten oder zweiten Hälfte des Felde gehört. Danach muss mit einem anderen Verfahren genauer sortiert werden.

Page 67: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 67

SortieraufgabenSortieraufgaben 6-8 6-8

6. Sortieren Sie ein Integerfeld über die Bestimmung des Maximums mit anschließendem Verschieben innerhalb des Feldes.

7. Ändern Sie Ihr Sortierprogramm so ab, dass ein String-Array String[20] sortiert werden kann. Benutzen Sie die Standardmethode compareTo. (Siehe stringSort)

8. Bewerten Sie die verschiedenen Verfahren. Welches Verfahren eignet sich für vorsortierte Zahlen?

Page 68: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 68

Trigonometrische TabelleTrigonometrische Tabelle

Zeilenzahl

Spaltenzahl

Überschriften

Page 69: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 69

Tabellenaufgaben 1-3Tabellenaufgaben 1-3

1. Begründen Sie, warum im Beispiel Zufall1.java nicht direkt nach den Strings sortiert wird, sondern diese erst in Integer konvertiert werden.

2. Informieren Sie sich bei www.java.sun.com über die Funktion Random(). Welche Wirkung hat ein Parameter?

3. Erweitern Sie unsere trigonometrische Tabelle auf die Tangensfunktion. Beachten Sie eventuelle Definitionslücken.

Page 70: JAVA und OOP Teil 2: Objektorientierung.

www.munz-udo.de 70

Tabellenaufgaben 4-7Tabellenaufgaben 4-7

4. Erstellen Sie eine Tabelle zur Umrechnung von Bogen- in Gradmaß

5. Tabellieren Sie die Temperaturskalen Celsius, Réaumur, Kelvin und Fahrenheit.

6. Bauen Sie das BubbleSort-Verfahren so um, dass man wahlweise nach oben oder nach unten sortieren kann.

7. Erweitern Sie das BubbleSort- Verfahren so, dass ein einzelner Durchgang der inneren Schleife pro Knopfdruck durchgeführt wird. So erkennt man, wie die Tabelle immer weiter sortiert wird.