Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die Programmierung – Sammlungen Folie 1 Uwe Lämmel Einführung in die Programmierung Datensammlung Uwe Lämmel Fakultät für Wirtschaftswissenschaften.

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die Programmierung – Sammlungen Folie 1 Uwe Lämmel Einführung in die Programmierung Datensammlung Uwe Lämmel Fakultät für Wirtschaftswissenschaften."—  Präsentation transkript:

1 Einführung in die Programmierung – Sammlungen Folie 1 Uwe Lämmel Einführung in die Programmierung Datensammlung Uwe Lämmel Fakultät für Wirtschaftswissenschaften

2 Einführung in die Programmierung – Sammlungen Folie 2 Uwe Lämmel Inhalt Verwalten mehrerer Objekte: Sammlungen (Collections) –ArrayList –Array Arbeiten mit Sammlungen: –Wiederholung (Iteration) –Iteratoren –Schleifen ( for–each, while–do, for)

3 Einführung in die Programmierung – Sammlungen Folie 3 Uwe Lämmel Sammlungen Typische Aufgabe der Wirtschaftsinformatik: Verwalten mehrerer (beliebig vieler) Objekte : –Personal –Termine –Aufträge –Rechnungen Aktionen: –Elemente hinzufügen –Elemente entfernen –Element suchen

4 Einführung in die Programmierung – Sammlungen Folie 4 Uwe Lämmel Beispiel: Notizbuch Anforderungen / Erwartungen: Notizen speichern keine Begrenzung für die Anzahl Anzahl gespeicherter Notizen angeben Einzelne Notizen anzeigen Alle Notizen anzeigen Machen Sie sich mit dem Notizbuch-Projekten vertraut!!

5 Einführung in die Programmierung – Sammlungen Folie 5 Uwe Lämmel Klassen-Bibliotheken nicht alles muss neu programmiert werden: es gibt nützliche, bereits "fertige" Klassen: Java – API: Application Programming Interface Bibliothek in Java: package java.util package bietet Klassen für Objekt-Sammlungen Wir nutzen Klasse ArrayList Machen Sie die Java – API für sich verfügbar! Schauen Sie sich die Klasse ArrayList an!

6 Einführung in die Programmierung – Sammlungen Folie 6 Uwe Lämmel Klasse Notizbuch import java.util.ArrayList; /** *... */ public class Notizbuch { // Speicher für beliebige Anzahl von Notizen private ArrayList notizen; /** * Initialisierung für ein Notizbuch */ public Notizbuch( ) { notizen = new ArrayList (); } // Konstruktor... } // Notizbuch erst ab Java 1.5

7 Einführung in die Programmierung – Sammlungen Folie 7 Uwe Lämmel Klasse ArrayList es wird definiert: –Typ der Sammlung: ArrayList –Typ der Elemente: –Name der Sammlung: notizen private ArrayList notizen; ArrayList – "Array-Liste von Zeichenketten"

8 Einführung in die Programmierung – Sammlungen Folie 8 Uwe Lämmel Objekt-Struktur Was passiert beim Einfügen einer weiteren Notiz?

9 Einführung in die Programmierung – Sammlungen Folie 9 Uwe Lämmel Benutzen der Sammlung class Notizbuch { private ArrayList notizen;... public void speichereNotiz(String notiz) { notizen.add(notiz); } // speichereNotiz public int anzahlNotizen() { return notizen.size(); } // anzahlNotizen... } // Notizbuch Hinzufügen einer Notiz Gibt Anzahl der Elemente in der ArrayList zurück add, size : Methoden der Klasse ArrayList, siehe API

10 Einführung in die Programmierung – Sammlungen Folie 10 Uwe Lämmel public void zeigeNotiz(int notiznummer){ if ( notiznummer >= 0 && notiznummer < anzahlNotizen() ) { System.out.println(notizen.get(notiznummer)); } // if } // zeigeNotiz Ermitteln einer Notiz Gültigkeit des Index prüfen! - vordefinierte Methode! - Parameter: Aufruf einer Methode!

11 Einführung in die Programmierung – Sammlungen Folie 11 Uwe Lämmel Zusammenfassung Elemente können hinzugefügt /entfernt werden Jedes Element hat eine Nummer / Index: 0, 1 … Wichtige Methoden der Klasse ArrayList sind: add, get, remove, size ArrayList ist ein parametrisierter/generischer Datentyp ArrayList-Objekte speichern beliebig viele Objekte Java - API enthält packages mit vordefinierten Klassen: j ava.util.ArrayList, java.lang.String, java.lang.System

12 Einführung in die Programmierung – Sammlungen Folie 12 Uwe Lämmel Wiederholung = Iteration oft sind Aktionen mehrfach auszuführen: –z.B. Ausgabe aller Notizen des Notizbuchs die meisten Programmiersprachen bieten: Schleifen–Anweisungen (loop statements) mehrere Schleifen-Formen in Java. –beginnen mit for–each–Schleife.

13 Einführung in die Programmierung – Sammlungen Folie 13 Uwe Lämmel for–each–Schleife for ( ElementTyp element : Sammlung) { Schleifen-Körper } // for-each Bedeutung: Für jedes element aus der Sammlung, führe die Anweisungen im Schleifen-Körper aus. Schleifen-Kopf Schlüsselwort for Anweisungen, die wiederholt werden

14 Einführung in die Programmierung – Sammlungen Folie 14 Uwe Lämmel for–each–Beispiel /** * Gib alle Notizen eines Notizbuchs aus */ public void notizenAusgeben() { for(String notiz : notizen) {// Schleifen-Kopf System.out.println(notiz); // Schleifen-Körper } // for } //notizenAusgeben for each note in notes, print out note

15 Einführung in die Programmierung – Sammlungen Folie 15 Uwe Lämmel while–Schleife while(bedingung) { Schleifen-Körper }//while Schleifenkopf: Bedingung Schlüsselwort while Anweisungen, die wiederholt werden Bedeutung: Solange die bedingung wahr (true) ist, führe die Anweisungen im Schleifen-Körper aus.

16 Einführung in die Programmierung – Sammlungen Folie 16 Uwe Lämmel while-Schleife: Beispiel /** * Gib alle Notizen eines Notizbuchs aus */ public void notizenAusgeben() { int index = 0; while(index < notizen.size()) { System.out.println(notizen.get(index)); index++; } //while }//notizenAusgeben um 1 erhöhen Bedeutung: while the value of index is less than the size of the collection, print the next note, and then increment index

17 Einführung in die Programmierung – Sammlungen Folie 17 Uwe Lämmel while–Schleife while (Bedingung) { Anweisungen } – while-Schleife ist anfangsgesteuert: – Bedingung wird zuerst geprüft mind. einmal! – wird benutzt, falls: – die Zahl der Durchläufe unbestimmt und – Test der Bedingung vor dem Bearbeiten des Körpers erforderlich: – z.B. in Sammlungen: Gibt es überhaupt ein Element? – Anweisungen im Schleifen–Körper müssen Bedingung beeinflussen, z.B. i++;

18 Einführung in die Programmierung – Sammlungen Folie 18 Uwe Lämmel for–each versus while for–each: einfacher aufzuschreiben sicher: stoppt garantiert! stets für alle Elemente der Sammlung while: nicht notwendig, die gesamte Sammlung zu bearbeiten kann auch ohne Sammlung benutzt werden Gefahr unendlicher Wiederholungen!

19 Einführung in die Programmierung – Sammlungen Folie 19 Uwe Lämmel while – ohne eine Objektsammlung – Gib alle geraden Zahlen zwischen 0 und 30 aus. – Berechne alle Teiler einer Zahl. – Bestimme die Quersumme einer Zahl. – Bestimme den größten gemeinsamen Teiler zweier Zahlen. – …

20 Einführung in die Programmierung – Sammlungen Folie 20 Uwe Lämmel Suche in einer Sammlung von Objekten int index = 0;// Nr. des aktuellen Elements boolean gefunden = false;// schon gefunden? // index < Größe der Sammlung UND noch nicht gefunden while(index < notizen.size() && !gefunden) { String notiz = notizen.get(index); // aktuelles Element if(notiz.contains(suchString)) { // siehe API: lang.String gefunden = true; // gefunden: Zeichenkette ist enthalten } //if else { index++; // nächster Index=>nächstes Element } //else } //while // Entweder gefunden oder gesamte Sammlung durchsucht if(!gefunden) index = –1;// index für nicht gefunden /** * Kopf der Methode (Signatur) sucheText suchString Zeichenkette nach der gesucht wird Index der Notiz, die text enthält, oder –1 */ public int sucheNotiz( String suchString ) { … return index; } // sucheNotiz

21 Einführung in die Programmierung – Sammlungen Folie 21 Uwe Lämmel Schleife mittels Iterator-Objekt Iterator it = meineSammlung.iterator(); while(it.hasNext()) { ElementTyp el = it.next(); // nächstes Element Anweisungen "machen etwas" mit Element el } //while public void notizenAusgaben() { Iterator it = notizen.iterator(); while ( it.hasNext() ) { String el = it.next(); System.out.println(el); } //while } //notizenAusgeben Beispiel:

22 Einführung in die Programmierung – Sammlungen Folie 22 Uwe Lämmel Schleifen und Objektsammlungen for – each: –wenn alle Elemente bearbeitet werden while – Schleife: –falls nur einige Elemente bearbeitet werden –wird durch Bedingung gesteuert –für Wiederholungen ohne Sammlungen Iterator – Objekt: –falls nur einige Elemente zu bearbeiten –insbesondere für Sammlungen ohne Index –alle Sammlungen (collections) der API stellen Iterator bereit Iteration / Schleife ist wichtiges Programmier-Muster (pattern)

23 Einführung in die Programmierung – Sammlungen Folie 23 Uwe Lämmel Array: Sammlungen fester Größe häufig Obergröße für Objekt-Sammlungen bekannt Programmiersprachen bieten: –spezielle Konstruktion: array –spezielle Schreibweise (Syntax): typ[ ]bzw.element[index ] Arrays in Java speichern Objekte oder Werte einfacher Datentypen.

24 Einführung in die Programmierung – Sammlungen Folie 24 Uwe Lämmel Array Arrays sind Objekte: mit new-Methode erzeugen Elemente eines Array beliebig aber fest: Attribut length gibt Anzahl der Elemente an: System.out.writeln(feld.length); // ausgegeben wird 6 Zugriff: feste Anzahl von Elementen eines Typs feld[0] = 17; feld[1] = 35; for(int i=0; i

25 Einführung in die Programmierung – Sammlungen Folie 25 Uwe Lämmel Array: Arbeitsweise Deklaration: int[ ] folge; int zfolge; // Zeiger Füllstand Erzeugung: folge = new int[100]; Initialisierung: for(int i=0;i

26 Einführung in die Programmierung – Sammlungen Folie 26 Uwe Lämmel Weblog–Analyse Auswertung der Zugriffe je Stunde vereinfacht –Zugriffe = Eingabe der Stunde durch Nutzer: Eingabe 14 = ein Zugriff in 14:00 – 14:59 notwendig: –Sammlung für 24 Werte (int) –Methode zum Einlesen von Werten

27 Einführung in die Programmierung – Sammlungen Folie 27 Uwe Lämmel Array zugriffeInStunde

28 Einführung in die Programmierung – Sammlungen Folie 28 Uwe Lämmel Klasse Weblog class Weblog { // Instanz-Variabeln private int[ ] zugriffInStunde; private int maxSt; public Weblog () { maxSt = 24; zugriffInStunde = new int[maxSt]; for(int i=0; i

29 Einführung in die Programmierung – Sammlungen Folie 29 Uwe Lämmel Methode Einlesen public void liesZugriffe() { wiederhole: Sag Nutzer, dass Stunde einzugeben ist. Lies Stunde ein. Wenn gültige Stunde, dann erhöhe Anzahl Zugriffe in der Stunde um eins. bis Ende (Nutzer hat –1 eingegeben) } //liesZugriffe

30 Einführung in die Programmierung – Sammlungen Folie 30 Uwe Lämmel Ein–, Ausgabe: Klasse LineIO Sammlung von Methoden für Ein-, Ausgabe: –write, writeln für String, int, double, … io.writeln("zahl= "+z); –formatierte Ausgabe: io.write(betrag,7,2); –Eingabe für Sring, double, int, char: zahl = io.readInt("Bitte Zahl eingeben: "); –KEIN Bestandteil der API! Datei LineIO.class muss im Verzeichnis stehen

31 Einführung in die Programmierung – Sammlungen Folie 31 Uwe Lämmel Nutzung von LineIO 1.LineIO.java kopieren in BlueJ: Edit > Add class from file 2.E/A-Objekt in Methode erzeugen: Line IO io = new LineIO(); 3.Methoden nutzen: st = io.readInt(" Zahl eingeben"); –werden Eingaben programmiert, dann: public void einlesen() throws Exception … Schauen Sie sich LineIO.java an, welche Methoden es gibt!

32 Einführung in die Programmierung – Sammlungen Folie 32 Uwe Lämmel Methode Einlesen public void liesZugriffe() throws Exception { IntIO io = new IntIO(); // Ein- Ausgabe-Objekt int st = -1; // einzulesende Stunde io.writeln(" Weblog: Eingabe der Stunden. Ende mit –1 "); do { st=io.readInt("Zugriff in Stunde: "); if(st>=0 && st<=maxSt) { // Test auf gueltige Stunde zugriffInStunde[st]++; // Anzahl Zugriffe erhöhen } else if(st!= -1){ // falls keine Stunde (s.o.) und kein Ende io.writeln("Ungueltige Stundenangabe!"); } //if } while(st!=-1); // wiederhole solange nicht Ende } //liesZugriffe

33 Einführung in die Programmierung – Sammlungen Folie 33 Uwe Lämmel Iteration: do–while–Schleife do { Anweisungen } while (Bedingung); do { zahl = io.readInt("Zahl: "); if (zahl >0) summe = summe +zahl; } while (zahl != -1); – endgesteuert – eingesetzt, falls: – Zahl der Durchläufe unbestimmt ist, und – Körper mindestens einmal durchlaufen werden muss. – typisch: Nutzerdialog Interpretation: Führe die Anweisungen wiederholt aus, solange die Bedingung wahr ist.

34 Einführung in die Programmierung – Sammlungen Folie 34 Uwe Lämmel Iteration: for–Schleife for (Initialisierung; Bedingung; EndeAnweisung) { Anweisungen } //for int fak = 1; for (int i=1;i<=zahl; i++) { fak = fak * i; } //for – anfangsgesteuert – eingesetzt, falls: – Zahl der Schleifendurchläufe bekannt ist und – durch eine Zählvariable gezählt werden kann Interpretation: Führe die Initialisierung aus, führe dann die Anweisungen des Körpers wiederholt aus, solange die Bedingung gilt. Nach jeder Ausführung des Schleifenkörpers wird die EndeAnweisung einmal ausgeführt.

35 Einführung in die Programmierung – Sammlungen Folie 35 Uwe Lämmel Beispiel for(int index = 0; index < zugriffeInStunden.length; index++) { io.writeln(index + ": " + zugriffeInStunden[index]); } //for int index = 0; while(index < zugriffeInStunden.length) { io.writeln(index + ": " + zugriffeInStunden [index]); index++; } //while Wirkung identisch!

36 Einführung in die Programmierung – Sammlungen Folie 36 Uwe Lämmel Zusammenfassung Sammlung Arraylist –Sammlung: Elemente (Objekte) mit Index 0,1,… –import java.util.Arraylist; –API enthält die Infos über Methoden –wichtige Methoden: add, delete, get, size Arrays für Sammlungen mit fester Obergrenze –Sammlung: Elemente mit Index 0,1,… –Elemente sind Objekte oder einfache Datentypen –Arrays sind Objekte mit new erzeugen –haben spezielle Syntax: eckige Klammern [ ]

37 Einführung in die Programmierung – Sammlungen Folie 37 Uwe Lämmel Zusammenfassung – Schleifen while(!gefunden) { … } do { … } while(!ende); for(Notiz n:notizen) … //for-each for(int i= 0,i

38 Einführung in die Programmierung – Sammlungen Folie 38 Uwe Lämmel Aufgabe - Sieb des Eratosthenes Zahl n einlesen Array mit Elementen von 0..n erzeugen; –Alle Komponenten auf true setzen Mit 2 beginnen bis n: alle Vielfachen im Array streichen, d.h. auf false setzen Ausgabe der Primzahlen zwischen 0..n Programmieren Sie den Algorithmus in einer ausführbaren Klasse (main-Methode)

39 Einführung in die Programmierung – Sammlungen Folie 39 Uwe Lämmel Aufgabe Studenten–Team Felder/Array kann beliebigen Typ enthalten! Student[ ] team; int zst; team = new Student[anzahl]; … team[zst] = new Student(name, matrikel); zst++; Entwickeln Sie eine Klasse Team, in der ein Studenten–Team verwaltet werden kann. Benutzen Sie eine Klasse Student und verwalten Sie die Team- Mitglieder in einem Array! Die maximale Teamgröße wird beim Erzeugen eines Teams festgelegt …

40 Einführung in die Programmierung – Sammlungen Folie 40 Uwe Lämmel Ende


Herunterladen ppt "Einführung in die Programmierung – Sammlungen Folie 1 Uwe Lämmel Einführung in die Programmierung Datensammlung Uwe Lämmel Fakultät für Wirtschaftswissenschaften."

Ähnliche Präsentationen


Google-Anzeigen